{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T09:38:53.169339Z",
     "start_time": "2025-02-25T09:38:49.950512Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)  #设备是cuda:0，即GPU，如果没有GPU则是cpu\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 2.2.1\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.1\n",
      "torch 2.6.0+cu126\n",
      "cuda:0\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T09:38:58.267705Z",
     "start_time": "2025-02-25T09:38:56.065635Z"
    }
   },
   "source": [
    "from torchvision import datasets\n",
    "from torchvision.transforms import ToTensor\n",
    "\n",
    "# fashion_mnist图像分类数据集\n",
    "train_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "test_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")"
   ],
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T09:39:25.902703Z",
     "start_time": "2025-02-25T09:39:25.898724Z"
    }
   },
   "cell_type": "code",
   "source": "type(train_ds)",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torchvision.datasets.mnist.FashionMNIST"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 3
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T09:39:26.816063Z",
     "start_time": "2025-02-25T09:39:26.813468Z"
    }
   },
   "source": [
    "train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True)\n",
    "val_loader = torch.utils.data.DataLoader(test_ds, batch_size=32, shuffle=False)"
   ],
   "outputs": [],
   "execution_count": 4
  },
  {
   "cell_type": "code",
   "source": [
    "# 查看数据\n",
    "for datas, labels in train_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break\n",
    "#查看val_loader\n",
    "for datas, labels in val_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T09:39:33.256308Z",
     "start_time": "2025-02-25T09:39:33.242511Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n",
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T09:39:44.789343Z",
     "start_time": "2025-02-25T09:39:44.784435Z"
    }
   },
   "source": [
    "class NeuralNetwork(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.linear_relu_stack = nn.Sequential(\n",
    "            nn.Linear(28 * 28, 300),  # in_features=784, out_features=300\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(300, 100),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(100, 10),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        # x.shape [batch size, 1, 28, 28]\n",
    "        x = self.flatten(x)  \n",
    "        # 展平后 x.shape [batch size, 28 * 28]\n",
    "        logits = self.linear_relu_stack(x)\n",
    "        # logits.shape [batch size, 10]\n",
    "        return logits\n",
    "    \n",
    "model = NeuralNetwork()"
   ],
   "outputs": [],
   "execution_count": 6
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练\n",
    "\n",
    "pytorch的训练需要自行实现，包括\n",
    "1. 定义损失函数\n",
    "2. 定义优化器\n",
    "3. 定义训练步\n",
    "4. 训练"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T09:39:50.518600Z",
     "start_time": "2025-02-25T09:39:50.470891Z"
    }
   },
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        #datas.shape [batch size, 1, 28, 28]\n",
    "        #labels.shape [batch size]\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item()) # tensor.item() 获取tensor的数值，loss是只有一个元素的tensor\n",
    "        \n",
    "        preds = logits.argmax(axis=-1)    # 验证集预测, axis=-1 表示最后一个维度,因为logits.shape [batch size, 10]，所以axis=-1表示对最后一个维度求argmax，即对每个样本的10个类别的概率求argmax，得到最大概率的类别, preds.shape [batch size]\n",
    "        pred_list.extend(preds.cpu().numpy().tolist()) # tensor转numpy，再转list\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list) # 验证集准确率\n",
    "    return np.mean(loss_list), acc # 返回验证集平均损失和准确率\n"
   ],
   "outputs": [],
   "execution_count": 7
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TensorBoard 可视化\n",
    "\n",
    "pip install tensorboard\n",
    "训练过程中可以使用如下命令启动tensorboard服务。注意使用绝对路径，否则会报错\n",
    "\n",
    "```shell\n",
    " tensorboard  --logdir=\"D:\\BaiduSyncdisk\\pytorch\\chapter_2_torch\\runs\" --host 0.0.0.0 --port 8848\n",
    "```"
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "在命令行where tensorboard才可以用"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T10:26:11.991633Z",
     "start_time": "2025-02-25T10:26:08.736678Z"
    }
   },
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs) # 实例化SummaryWriter, log_dir是log存放路径，flush_secs是每隔多少秒写入磁盘\n",
    "\n",
    "    def draw_model(self, model, input_shape):#graphs\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape)) # 画模型图\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            ) # 画loss曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        ) # 画acc曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "        ) # 画lr曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss,把loss，val_loss取掉，画loss曲线\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss) # 画loss曲线\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc) # 画acc曲线\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate) # 画lr曲线\n"
   ],
   "outputs": [],
   "execution_count": 8
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T10:44:19.230646Z",
     "start_time": "2025-02-25T10:44:19.225326Z"
    }
   },
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=500, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir # 保存路径\n",
    "        self.save_step = save_step # 保存步数\n",
    "        self.save_best_only = save_best_only # 是否只保存最好的模型\n",
    "        self.best_metrics = -1 # 最好的指标，指标不可能为负数，所以初始化为-1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir): # 如果不存在保存路径，则创建\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0: #每隔save_step步保存一次\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None # 必须传入metric\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\")) # 保存最好的模型，覆盖之前的模型，不保存step，只保存state_dict，即模型参数，不保存优化器参数\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\")) # 保存每个step的模型，不覆盖之前的模型，保存step，保存state_dict，即模型参数，不保存优化器参数\n",
    "\n"
   ],
   "outputs": [],
   "execution_count": 9
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T10:44:25.972130Z",
     "start_time": "2025-02-25T10:44:25.967583Z"
    }
   },
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience # 多少个step没有提升就停止训练\n",
    "        self.min_delta = min_delta # 最小的提升幅度\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0 # 计数器，记录多少个step没有提升\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:#用准确率\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1 # 计数器加1，下面的patience判断用到\n",
    "            \n",
    "    @property #使用@property装饰器，使得 对象.early_stop可以调用，不需要()\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "cell_type": "code",
   "source": [
    "500*32*5"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T11:11:13.266311Z",
     "start_time": "2025-02-25T11:11:13.262311Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "80000"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 11
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T11:11:14.190786Z",
     "start_time": "2025-02-25T11:11:14.184204Z"
    }
   },
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device) # 数据放到device上\n",
    "                labels = labels.to(device) # 标签放到device上\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传，计算梯度，更新参数，这里是更新模型参数\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits.argmax(axis=-1)\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()  # 切换到验证集模式\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train() # 切换回训练集模式\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"], # 取出当前学习率\n",
    "                            )\n",
    "                    \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc) # 保存最好的模型，覆盖之前的模型，保存step，保存state_dict,通过metric判断是否保存最好的模型\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc) # 验证集准确率不再提升，则停止训练\n",
    "                        if early_stop_callback.early_stop:# 验证集准确率不再提升，则停止训练\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict"
   ],
   "outputs": [],
   "execution_count": 12
  },
  {
   "cell_type": "code",
   "source": [
    "epoch = 100\n",
    "\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 1. 定义损失函数 采用MSE损失\n",
    "loss_fct = nn.CrossEntropyLoss()\n",
    "# 2. 定义优化器 采用SGD\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "tensorboard_callback = TensorBoardCallback(\"runs\")\n",
    "tensorboard_callback.draw_model(model, [1, 28, 28])\n",
    "# 2. save best\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints\", save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T12:22:54.110023Z",
     "start_time": "2025-02-25T12:22:54.008712Z"
    }
   },
   "outputs": [],
   "execution_count": 19
  },
  {
   "cell_type": "code",
   "source": [
    "list(model.parameters())[1] #可学习的模型参数"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T12:22:54.840109Z",
     "start_time": "2025-02-25T12:22:54.833097Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([ 1.6897e-02, -6.6894e-03, -1.2457e-02,  1.8398e-02,  4.2148e-03,\n",
       "        -8.3263e-03,  1.5783e-02, -1.3161e-02,  2.0853e-02,  1.2924e-02,\n",
       "         1.0076e-02, -2.9687e-02, -2.3174e-02, -1.9774e-02,  1.3484e-02,\n",
       "        -4.3414e-03,  2.0777e-02,  1.5061e-02,  9.5093e-03, -1.0303e-02,\n",
       "         2.5580e-02,  1.8331e-02,  2.1072e-02,  1.9066e-02,  4.5130e-03,\n",
       "        -1.6487e-02,  3.2497e-02, -8.4843e-03, -3.4675e-02,  2.5253e-02,\n",
       "        -2.4643e-02,  2.8499e-02, -3.2622e-02, -2.4387e-02,  3.3619e-02,\n",
       "        -1.0107e-02, -4.5821e-03,  2.4125e-02,  1.5990e-02,  3.2129e-02,\n",
       "         1.7445e-02,  3.3491e-02,  2.7130e-02, -1.6499e-02, -1.4691e-02,\n",
       "        -1.2303e-02,  1.7410e-02, -1.1675e-02,  1.0599e-02,  2.5542e-02,\n",
       "        -1.6648e-02,  1.9073e-02, -1.0052e-03, -4.0979e-03,  3.4480e-02,\n",
       "         1.0139e-02, -3.3786e-02, -2.8120e-02, -1.6114e-02, -2.2901e-03,\n",
       "        -3.5292e-03, -2.1276e-02,  2.2229e-02,  8.9744e-03, -1.5037e-02,\n",
       "        -8.0462e-03,  1.3803e-02, -2.1534e-02, -3.1140e-02,  1.7859e-02,\n",
       "         2.3758e-02, -5.3877e-03,  3.5448e-02,  2.2331e-02, -2.6451e-02,\n",
       "        -3.4491e-02, -1.5622e-02, -3.4168e-02,  1.9999e-02, -1.4387e-02,\n",
       "         1.3618e-02,  6.2168e-03,  3.3471e-04,  1.9224e-02, -7.7114e-03,\n",
       "        -3.5321e-02,  1.9774e-02,  1.5081e-03,  2.2104e-02, -2.7166e-02,\n",
       "         2.3099e-02, -9.6147e-03,  3.2690e-02,  1.1539e-02,  2.9653e-03,\n",
       "         3.0697e-02, -2.3375e-02, -2.3588e-02, -3.6643e-03,  1.5720e-02,\n",
       "         2.7449e-02, -2.5228e-02, -6.9671e-03, -1.7324e-02,  2.8439e-02,\n",
       "         9.1641e-03,  3.4374e-02, -2.6656e-03, -2.2342e-02,  1.0112e-02,\n",
       "        -1.7631e-02,  1.5222e-03,  3.2712e-02, -7.0904e-03,  2.2523e-03,\n",
       "         2.4593e-02,  2.0438e-02, -3.0892e-02,  1.6734e-03,  3.3332e-02,\n",
       "        -1.6990e-03, -2.7360e-02,  1.1217e-02,  2.1343e-02,  3.3041e-02,\n",
       "         5.5436e-03, -1.1598e-02, -3.2395e-02, -7.2367e-03, -5.8506e-03,\n",
       "        -3.0260e-02, -1.0407e-02, -2.9821e-02, -2.7297e-03,  7.0939e-04,\n",
       "        -3.3006e-02,  2.6249e-02,  3.0006e-02, -2.8715e-02, -3.4093e-02,\n",
       "        -7.1686e-03,  1.2808e-02, -2.1558e-02, -3.5007e-02, -1.0834e-02,\n",
       "        -2.2712e-02, -3.0389e-02, -2.0323e-04, -1.2993e-02, -1.8752e-02,\n",
       "        -3.2958e-02,  2.8233e-02, -3.2071e-02, -2.3161e-02, -1.5141e-04,\n",
       "        -7.6700e-03, -3.0923e-02,  2.0333e-02, -2.3643e-03,  1.1333e-02,\n",
       "        -1.5420e-02, -2.5141e-02, -5.6654e-05,  2.8371e-02,  1.0066e-02,\n",
       "         2.8275e-02, -3.3079e-02, -8.8616e-03,  5.5693e-03,  1.5212e-02,\n",
       "         2.9591e-02,  4.3737e-03,  2.4459e-02, -2.3490e-03, -4.6802e-03,\n",
       "         1.2475e-03, -1.2112e-02,  3.1107e-02, -3.1011e-02, -1.1372e-02,\n",
       "         2.9987e-02, -3.3370e-02, -2.6977e-02,  3.3769e-02, -2.5599e-02,\n",
       "        -2.0170e-02, -3.1536e-03,  3.5342e-02, -3.4845e-02, -3.3650e-02,\n",
       "        -2.9080e-02, -3.0734e-02,  1.8492e-02,  1.4457e-02,  3.0638e-02,\n",
       "         9.3152e-03,  3.4431e-02,  1.9335e-02, -6.7241e-03,  1.6484e-02,\n",
       "         1.0596e-02, -1.2854e-02,  9.0427e-03, -2.3629e-02, -8.2910e-03,\n",
       "         3.3851e-02,  1.3860e-02,  1.2185e-03,  3.3363e-02, -3.3512e-02,\n",
       "         4.5297e-03, -3.3504e-02, -1.7080e-02,  1.2074e-04, -6.3512e-03,\n",
       "        -2.6283e-02, -3.2109e-02,  1.1757e-03,  3.7111e-03, -1.4502e-02,\n",
       "         3.9691e-03, -3.4087e-02, -1.0680e-02,  3.2588e-02,  2.1581e-02,\n",
       "        -5.8146e-03, -3.0747e-02,  1.1051e-02, -1.5107e-02, -3.3745e-02,\n",
       "         1.0173e-02, -3.9148e-03,  1.7296e-02,  1.4068e-02, -5.2295e-03,\n",
       "         2.1835e-02, -3.3451e-02, -3.1140e-02,  2.0309e-02, -2.6605e-02,\n",
       "        -1.4349e-02,  3.4720e-02, -1.8569e-02,  2.2908e-02, -8.3490e-03,\n",
       "         3.2745e-02, -1.2469e-02, -1.0238e-02,  2.5794e-02, -1.9817e-02,\n",
       "         1.2025e-02,  2.3490e-02,  1.6616e-02, -7.9157e-03, -2.0882e-02,\n",
       "        -1.5273e-02, -1.4686e-02, -3.2750e-02, -3.3805e-02, -2.2171e-02,\n",
       "         2.6946e-02, -1.9434e-02, -2.8839e-02, -3.5230e-02, -2.4397e-02,\n",
       "         3.4916e-03,  2.1160e-02,  1.3273e-02,  1.0934e-03,  2.4600e-02,\n",
       "         3.1354e-02, -1.6252e-03,  1.9329e-02, -9.8211e-03,  6.1504e-04,\n",
       "        -2.1575e-02, -3.4183e-02,  2.6383e-05,  2.4256e-02, -8.7988e-04,\n",
       "        -1.1849e-02, -1.5573e-02, -2.0217e-03,  2.2105e-02, -7.1910e-03,\n",
       "         3.2422e-02,  1.2810e-02, -2.5339e-02, -4.1116e-03,  1.3148e-02,\n",
       "        -2.2582e-02, -2.3602e-02, -2.7366e-02, -6.6975e-03, -1.4800e-03,\n",
       "         2.5157e-02, -3.4615e-02,  7.3453e-03, -3.1638e-03, -2.0054e-02],\n",
       "       requires_grad=True)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 20
  },
  {
   "cell_type": "code",
   "source": "model.state_dict().keys() #模型参数名字",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T12:22:56.583840Z",
     "start_time": "2025-02-25T12:22:56.579839Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "odict_keys(['linear_relu_stack.0.weight', 'linear_relu_stack.0.bias', 'linear_relu_stack.2.weight', 'linear_relu_stack.2.bias', 'linear_relu_stack.4.weight', 'linear_relu_stack.4.bias'])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 21
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T12:27:09.599205Z",
     "start_time": "2025-02-25T12:22:58.824549Z"
    }
   },
   "cell_type": "code",
   "source": [
    "model = model.to(device) # 放到device上\n",
    "record = training(\n",
    "    model,\n",
    "    train_loader,\n",
    "    val_loader,\n",
    "    epoch,\n",
    "    loss_fct,\n",
    "    optimizer,\n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=1000\n",
    "    )\n",
    "#没有进度条，是因为pycharm本身jupyter的问题"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  0%|          | 0/187500 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "a980c6348b224d81b14b8ef295edb292"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Early stop at epoch 19 / global_step 37000\n"
     ]
    }
   ],
   "execution_count": 22
  },
  {
   "cell_type": "code",
   "source": [
    "for i, item in enumerate([\"a\", \"b\", \"c\"]):\n",
    "    print(i, item)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T12:21:21.936586Z",
     "start_time": "2025-02-25T12:21:21.933559Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 a\n",
      "1 b\n",
      "2 c\n"
     ]
    }
   ],
   "execution_count": 17
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T12:27:22.462094Z",
     "start_time": "2025-02-25T12:27:22.426526Z"
    }
   },
   "cell_type": "code",
   "source": "record",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'train': [{'loss': 2.2943122386932373, 'acc': 0.125, 'step': 0},\n",
       "  {'loss': 2.276078939437866, 'acc': 0.125, 'step': 1},\n",
       "  {'loss': 2.2897984981536865, 'acc': 0.21875, 'step': 2},\n",
       "  {'loss': 2.2761619091033936, 'acc': 0.28125, 'step': 3},\n",
       "  {'loss': 2.2852511405944824, 'acc': 0.25, 'step': 4},\n",
       "  {'loss': 2.3085789680480957, 'acc': 0.09375, 'step': 5},\n",
       "  {'loss': 2.2698073387145996, 'acc': 0.1875, 'step': 6},\n",
       "  {'loss': 2.2886531352996826, 'acc': 0.25, 'step': 7},\n",
       "  {'loss': 2.3037047386169434, 'acc': 0.1875, 'step': 8},\n",
       "  {'loss': 2.282632350921631, 'acc': 0.25, 'step': 9},\n",
       "  {'loss': 2.284636974334717, 'acc': 0.15625, 'step': 10},\n",
       "  {'loss': 2.285590410232544, 'acc': 0.125, 'step': 11},\n",
       "  {'loss': 2.2855026721954346, 'acc': 0.21875, 'step': 12},\n",
       "  {'loss': 2.298957586288452, 'acc': 0.09375, 'step': 13},\n",
       "  {'loss': 2.293440341949463, 'acc': 0.125, 'step': 14},\n",
       "  {'loss': 2.275244951248169, 'acc': 0.15625, 'step': 15},\n",
       "  {'loss': 2.273120880126953, 'acc': 0.15625, 'step': 16},\n",
       "  {'loss': 2.2805092334747314, 'acc': 0.125, 'step': 17},\n",
       "  {'loss': 2.288486957550049, 'acc': 0.15625, 'step': 18},\n",
       "  {'loss': 2.282660722732544, 'acc': 0.15625, 'step': 19},\n",
       "  {'loss': 2.282668352127075, 'acc': 0.21875, 'step': 20},\n",
       "  {'loss': 2.27642560005188, 'acc': 0.15625, 'step': 21},\n",
       "  {'loss': 2.2786173820495605, 'acc': 0.0625, 'step': 22},\n",
       "  {'loss': 2.2847137451171875, 'acc': 0.09375, 'step': 23},\n",
       "  {'loss': 2.265228271484375, 'acc': 0.09375, 'step': 24},\n",
       "  {'loss': 2.281371593475342, 'acc': 0.15625, 'step': 25},\n",
       "  {'loss': 2.274749994277954, 'acc': 0.0625, 'step': 26},\n",
       "  {'loss': 2.271181583404541, 'acc': 0.0625, 'step': 27},\n",
       "  {'loss': 2.2435190677642822, 'acc': 0.125, 'step': 28},\n",
       "  {'loss': 2.279040575027466, 'acc': 0.09375, 'step': 29},\n",
       "  {'loss': 2.266773223876953, 'acc': 0.15625, 'step': 30},\n",
       "  {'loss': 2.3142030239105225, 'acc': 0.125, 'step': 31},\n",
       "  {'loss': 2.2799875736236572, 'acc': 0.0625, 'step': 32},\n",
       "  {'loss': 2.245523452758789, 'acc': 0.21875, 'step': 33},\n",
       "  {'loss': 2.2577168941497803, 'acc': 0.125, 'step': 34},\n",
       "  {'loss': 2.248906135559082, 'acc': 0.15625, 'step': 35},\n",
       "  {'loss': 2.283731460571289, 'acc': 0.09375, 'step': 36},\n",
       "  {'loss': 2.272458791732788, 'acc': 0.125, 'step': 37},\n",
       "  {'loss': 2.231311559677124, 'acc': 0.21875, 'step': 38},\n",
       "  {'loss': 2.241058349609375, 'acc': 0.25, 'step': 39},\n",
       "  {'loss': 2.2520499229431152, 'acc': 0.15625, 'step': 40},\n",
       "  {'loss': 2.2645516395568848, 'acc': 0.09375, 'step': 41},\n",
       "  {'loss': 2.2535924911499023, 'acc': 0.1875, 'step': 42},\n",
       "  {'loss': 2.294956922531128, 'acc': 0.09375, 'step': 43},\n",
       "  {'loss': 2.2630491256713867, 'acc': 0.15625, 'step': 44},\n",
       "  {'loss': 2.2257261276245117, 'acc': 0.21875, 'step': 45},\n",
       "  {'loss': 2.235483169555664, 'acc': 0.21875, 'step': 46},\n",
       "  {'loss': 2.267775535583496, 'acc': 0.0625, 'step': 47},\n",
       "  {'loss': 2.2364673614501953, 'acc': 0.21875, 'step': 48},\n",
       "  {'loss': 2.2136313915252686, 'acc': 0.34375, 'step': 49},\n",
       "  {'loss': 2.203150510787964, 'acc': 0.3125, 'step': 50},\n",
       "  {'loss': 2.2312145233154297, 'acc': 0.125, 'step': 51},\n",
       "  {'loss': 2.2630224227905273, 'acc': 0.09375, 'step': 52},\n",
       "  {'loss': 2.258662462234497, 'acc': 0.125, 'step': 53},\n",
       "  {'loss': 2.252218008041382, 'acc': 0.125, 'step': 54},\n",
       "  {'loss': 2.238168716430664, 'acc': 0.21875, 'step': 55},\n",
       "  {'loss': 2.2018964290618896, 'acc': 0.28125, 'step': 56},\n",
       "  {'loss': 2.2224960327148438, 'acc': 0.15625, 'step': 57},\n",
       "  {'loss': 2.2141199111938477, 'acc': 0.34375, 'step': 58},\n",
       "  {'loss': 2.218843460083008, 'acc': 0.1875, 'step': 59},\n",
       "  {'loss': 2.2640600204467773, 'acc': 0.09375, 'step': 60},\n",
       "  {'loss': 2.2208657264709473, 'acc': 0.1875, 'step': 61},\n",
       "  {'loss': 2.2291598320007324, 'acc': 0.1875, 'step': 62},\n",
       "  {'loss': 2.229149103164673, 'acc': 0.15625, 'step': 63},\n",
       "  {'loss': 2.237816572189331, 'acc': 0.15625, 'step': 64},\n",
       "  {'loss': 2.271916389465332, 'acc': 0.09375, 'step': 65},\n",
       "  {'loss': 2.2177019119262695, 'acc': 0.21875, 'step': 66},\n",
       "  {'loss': 2.219663381576538, 'acc': 0.15625, 'step': 67},\n",
       "  {'loss': 2.254348039627075, 'acc': 0.03125, 'step': 68},\n",
       "  {'loss': 2.2330634593963623, 'acc': 0.125, 'step': 69},\n",
       "  {'loss': 2.2202610969543457, 'acc': 0.15625, 'step': 70},\n",
       "  {'loss': 2.2240562438964844, 'acc': 0.09375, 'step': 71},\n",
       "  {'loss': 2.2012739181518555, 'acc': 0.09375, 'step': 72},\n",
       "  {'loss': 2.234663724899292, 'acc': 0.09375, 'step': 73},\n",
       "  {'loss': 2.2238216400146484, 'acc': 0.09375, 'step': 74},\n",
       "  {'loss': 2.2446303367614746, 'acc': 0.125, 'step': 75},\n",
       "  {'loss': 2.2076895236968994, 'acc': 0.1875, 'step': 76},\n",
       "  {'loss': 2.230377674102783, 'acc': 0.125, 'step': 77},\n",
       "  {'loss': 2.1838786602020264, 'acc': 0.28125, 'step': 78},\n",
       "  {'loss': 2.206224203109741, 'acc': 0.25, 'step': 79},\n",
       "  {'loss': 2.2397191524505615, 'acc': 0.21875, 'step': 80},\n",
       "  {'loss': 2.221644878387451, 'acc': 0.09375, 'step': 81},\n",
       "  {'loss': 2.218252420425415, 'acc': 0.15625, 'step': 82},\n",
       "  {'loss': 2.228146553039551, 'acc': 0.25, 'step': 83},\n",
       "  {'loss': 2.2117834091186523, 'acc': 0.3125, 'step': 84},\n",
       "  {'loss': 2.2079830169677734, 'acc': 0.21875, 'step': 85},\n",
       "  {'loss': 2.197904109954834, 'acc': 0.28125, 'step': 86},\n",
       "  {'loss': 2.1947553157806396, 'acc': 0.375, 'step': 87},\n",
       "  {'loss': 2.194512367248535, 'acc': 0.28125, 'step': 88},\n",
       "  {'loss': 2.1701889038085938, 'acc': 0.3125, 'step': 89},\n",
       "  {'loss': 2.179166078567505, 'acc': 0.3125, 'step': 90},\n",
       "  {'loss': 2.212737560272217, 'acc': 0.28125, 'step': 91},\n",
       "  {'loss': 2.1749753952026367, 'acc': 0.3125, 'step': 92},\n",
       "  {'loss': 2.187380313873291, 'acc': 0.28125, 'step': 93},\n",
       "  {'loss': 2.1845338344573975, 'acc': 0.25, 'step': 94},\n",
       "  {'loss': 2.199317216873169, 'acc': 0.15625, 'step': 95},\n",
       "  {'loss': 2.1799490451812744, 'acc': 0.34375, 'step': 96},\n",
       "  {'loss': 2.1825668811798096, 'acc': 0.34375, 'step': 97},\n",
       "  {'loss': 2.168224573135376, 'acc': 0.34375, 'step': 98},\n",
       "  {'loss': 2.184433698654175, 'acc': 0.34375, 'step': 99},\n",
       "  {'loss': 2.165034294128418, 'acc': 0.375, 'step': 100},\n",
       "  {'loss': 2.195096731185913, 'acc': 0.15625, 'step': 101},\n",
       "  {'loss': 2.1638739109039307, 'acc': 0.375, 'step': 102},\n",
       "  {'loss': 2.1285512447357178, 'acc': 0.40625, 'step': 103},\n",
       "  {'loss': 2.178631067276001, 'acc': 0.34375, 'step': 104},\n",
       "  {'loss': 2.165523052215576, 'acc': 0.375, 'step': 105},\n",
       "  {'loss': 2.192873001098633, 'acc': 0.3125, 'step': 106},\n",
       "  {'loss': 2.141855478286743, 'acc': 0.4375, 'step': 107},\n",
       "  {'loss': 2.169548749923706, 'acc': 0.375, 'step': 108},\n",
       "  {'loss': 2.1522624492645264, 'acc': 0.375, 'step': 109},\n",
       "  {'loss': 2.1460607051849365, 'acc': 0.34375, 'step': 110},\n",
       "  {'loss': 2.1619489192962646, 'acc': 0.34375, 'step': 111},\n",
       "  {'loss': 2.1495208740234375, 'acc': 0.40625, 'step': 112},\n",
       "  {'loss': 2.189345598220825, 'acc': 0.375, 'step': 113},\n",
       "  {'loss': 2.1636321544647217, 'acc': 0.3125, 'step': 114},\n",
       "  {'loss': 2.2040562629699707, 'acc': 0.3125, 'step': 115},\n",
       "  {'loss': 2.1191320419311523, 'acc': 0.40625, 'step': 116},\n",
       "  {'loss': 2.140737295150757, 'acc': 0.375, 'step': 117},\n",
       "  {'loss': 2.168074369430542, 'acc': 0.21875, 'step': 118},\n",
       "  {'loss': 2.196603775024414, 'acc': 0.21875, 'step': 119},\n",
       "  {'loss': 2.1412253379821777, 'acc': 0.375, 'step': 120},\n",
       "  {'loss': 2.1822052001953125, 'acc': 0.21875, 'step': 121},\n",
       "  {'loss': 2.159738779067993, 'acc': 0.3125, 'step': 122},\n",
       "  {'loss': 2.1635944843292236, 'acc': 0.28125, 'step': 123},\n",
       "  {'loss': 2.167457103729248, 'acc': 0.1875, 'step': 124},\n",
       "  {'loss': 2.171356678009033, 'acc': 0.28125, 'step': 125},\n",
       "  {'loss': 2.104219675064087, 'acc': 0.46875, 'step': 126},\n",
       "  {'loss': 2.1599173545837402, 'acc': 0.21875, 'step': 127},\n",
       "  {'loss': 2.1617612838745117, 'acc': 0.34375, 'step': 128},\n",
       "  {'loss': 2.1023964881896973, 'acc': 0.375, 'step': 129},\n",
       "  {'loss': 2.1125316619873047, 'acc': 0.34375, 'step': 130},\n",
       "  {'loss': 2.2138471603393555, 'acc': 0.21875, 'step': 131},\n",
       "  {'loss': 2.1658589839935303, 'acc': 0.21875, 'step': 132},\n",
       "  {'loss': 2.1231865882873535, 'acc': 0.40625, 'step': 133},\n",
       "  {'loss': 2.1121344566345215, 'acc': 0.375, 'step': 134},\n",
       "  {'loss': 2.115311861038208, 'acc': 0.34375, 'step': 135},\n",
       "  {'loss': 2.0936765670776367, 'acc': 0.375, 'step': 136},\n",
       "  {'loss': 2.0572924613952637, 'acc': 0.375, 'step': 137},\n",
       "  {'loss': 2.1493942737579346, 'acc': 0.25, 'step': 138},\n",
       "  {'loss': 2.1395726203918457, 'acc': 0.375, 'step': 139},\n",
       "  {'loss': 2.1434078216552734, 'acc': 0.3125, 'step': 140},\n",
       "  {'loss': 2.1229162216186523, 'acc': 0.3125, 'step': 141},\n",
       "  {'loss': 2.060028553009033, 'acc': 0.3125, 'step': 142},\n",
       "  {'loss': 2.1702818870544434, 'acc': 0.3125, 'step': 143},\n",
       "  {'loss': 2.2132339477539062, 'acc': 0.125, 'step': 144},\n",
       "  {'loss': 2.1123924255371094, 'acc': 0.34375, 'step': 145},\n",
       "  {'loss': 2.1452033519744873, 'acc': 0.3125, 'step': 146},\n",
       "  {'loss': 2.0824484825134277, 'acc': 0.40625, 'step': 147},\n",
       "  {'loss': 2.120562791824341, 'acc': 0.34375, 'step': 148},\n",
       "  {'loss': 2.1846444606781006, 'acc': 0.25, 'step': 149},\n",
       "  {'loss': 2.0705485343933105, 'acc': 0.40625, 'step': 150},\n",
       "  {'loss': 2.113558292388916, 'acc': 0.28125, 'step': 151},\n",
       "  {'loss': 2.0945332050323486, 'acc': 0.40625, 'step': 152},\n",
       "  {'loss': 2.1222379207611084, 'acc': 0.28125, 'step': 153},\n",
       "  {'loss': 2.047194242477417, 'acc': 0.4375, 'step': 154},\n",
       "  {'loss': 2.0560927391052246, 'acc': 0.40625, 'step': 155},\n",
       "  {'loss': 2.0884275436401367, 'acc': 0.375, 'step': 156},\n",
       "  {'loss': 2.1240437030792236, 'acc': 0.3125, 'step': 157},\n",
       "  {'loss': 2.091712713241577, 'acc': 0.3125, 'step': 158},\n",
       "  {'loss': 2.040663719177246, 'acc': 0.46875, 'step': 159},\n",
       "  {'loss': 2.1120386123657227, 'acc': 0.375, 'step': 160},\n",
       "  {'loss': 2.0859034061431885, 'acc': 0.40625, 'step': 161},\n",
       "  {'loss': 2.114741086959839, 'acc': 0.3125, 'step': 162},\n",
       "  {'loss': 2.0564191341400146, 'acc': 0.375, 'step': 163},\n",
       "  {'loss': 2.155496835708618, 'acc': 0.3125, 'step': 164},\n",
       "  {'loss': 2.049720525741577, 'acc': 0.5, 'step': 165},\n",
       "  {'loss': 2.0847418308258057, 'acc': 0.28125, 'step': 166},\n",
       "  {'loss': 2.0330395698547363, 'acc': 0.375, 'step': 167},\n",
       "  {'loss': 2.0860788822174072, 'acc': 0.34375, 'step': 168},\n",
       "  {'loss': 2.0548033714294434, 'acc': 0.3125, 'step': 169},\n",
       "  {'loss': 2.1221909523010254, 'acc': 0.375, 'step': 170},\n",
       "  {'loss': 2.0803000926971436, 'acc': 0.40625, 'step': 171},\n",
       "  {'loss': 2.0656979084014893, 'acc': 0.375, 'step': 172},\n",
       "  {'loss': 2.0862059593200684, 'acc': 0.40625, 'step': 173},\n",
       "  {'loss': 1.9685096740722656, 'acc': 0.53125, 'step': 174},\n",
       "  {'loss': 2.052852153778076, 'acc': 0.34375, 'step': 175},\n",
       "  {'loss': 2.012838840484619, 'acc': 0.5, 'step': 176},\n",
       "  {'loss': 2.069401741027832, 'acc': 0.40625, 'step': 177},\n",
       "  {'loss': 1.993525743484497, 'acc': 0.625, 'step': 178},\n",
       "  {'loss': 2.074467897415161, 'acc': 0.375, 'step': 179},\n",
       "  {'loss': 2.026111602783203, 'acc': 0.40625, 'step': 180},\n",
       "  {'loss': 2.0997064113616943, 'acc': 0.21875, 'step': 181},\n",
       "  {'loss': 2.1116490364074707, 'acc': 0.3125, 'step': 182},\n",
       "  {'loss': 2.0662014484405518, 'acc': 0.375, 'step': 183},\n",
       "  {'loss': 2.0556674003601074, 'acc': 0.375, 'step': 184},\n",
       "  {'loss': 2.103865623474121, 'acc': 0.3125, 'step': 185},\n",
       "  {'loss': 2.0174546241760254, 'acc': 0.4375, 'step': 186},\n",
       "  {'loss': 2.0048015117645264, 'acc': 0.5625, 'step': 187},\n",
       "  {'loss': 2.0732979774475098, 'acc': 0.28125, 'step': 188},\n",
       "  {'loss': 2.0646440982818604, 'acc': 0.25, 'step': 189},\n",
       "  {'loss': 2.0526697635650635, 'acc': 0.34375, 'step': 190},\n",
       "  {'loss': 2.054671287536621, 'acc': 0.375, 'step': 191},\n",
       "  {'loss': 2.0838124752044678, 'acc': 0.3125, 'step': 192},\n",
       "  {'loss': 1.9555631875991821, 'acc': 0.4375, 'step': 193},\n",
       "  {'loss': 2.0713908672332764, 'acc': 0.34375, 'step': 194},\n",
       "  {'loss': 1.9996461868286133, 'acc': 0.34375, 'step': 195},\n",
       "  {'loss': 2.0853612422943115, 'acc': 0.34375, 'step': 196},\n",
       "  {'loss': 2.0728557109832764, 'acc': 0.3125, 'step': 197},\n",
       "  {'loss': 1.9958350658416748, 'acc': 0.46875, 'step': 198},\n",
       "  {'loss': 2.0101914405822754, 'acc': 0.5625, 'step': 199},\n",
       "  {'loss': 2.0438694953918457, 'acc': 0.34375, 'step': 200},\n",
       "  {'loss': 1.9677329063415527, 'acc': 0.46875, 'step': 201},\n",
       "  {'loss': 1.963857889175415, 'acc': 0.46875, 'step': 202},\n",
       "  {'loss': 1.9505797624588013, 'acc': 0.4375, 'step': 203},\n",
       "  {'loss': 1.9932820796966553, 'acc': 0.375, 'step': 204},\n",
       "  {'loss': 1.9938859939575195, 'acc': 0.375, 'step': 205},\n",
       "  {'loss': 1.9437830448150635, 'acc': 0.53125, 'step': 206},\n",
       "  {'loss': 1.9794540405273438, 'acc': 0.4375, 'step': 207},\n",
       "  {'loss': 2.013723611831665, 'acc': 0.3125, 'step': 208},\n",
       "  {'loss': 2.0141310691833496, 'acc': 0.40625, 'step': 209},\n",
       "  {'loss': 1.9470806121826172, 'acc': 0.4375, 'step': 210},\n",
       "  {'loss': 1.9774385690689087, 'acc': 0.5, 'step': 211},\n",
       "  {'loss': 1.9691025018692017, 'acc': 0.375, 'step': 212},\n",
       "  {'loss': 1.971901297569275, 'acc': 0.375, 'step': 213},\n",
       "  {'loss': 1.9414820671081543, 'acc': 0.4375, 'step': 214},\n",
       "  {'loss': 2.0146610736846924, 'acc': 0.40625, 'step': 215},\n",
       "  {'loss': 1.943857192993164, 'acc': 0.4375, 'step': 216},\n",
       "  {'loss': 1.9489526748657227, 'acc': 0.375, 'step': 217},\n",
       "  {'loss': 1.9850361347198486, 'acc': 0.34375, 'step': 218},\n",
       "  {'loss': 1.905536413192749, 'acc': 0.5625, 'step': 219},\n",
       "  {'loss': 2.002769708633423, 'acc': 0.375, 'step': 220},\n",
       "  {'loss': 2.0073535442352295, 'acc': 0.28125, 'step': 221},\n",
       "  {'loss': 1.9092849493026733, 'acc': 0.5, 'step': 222},\n",
       "  {'loss': 1.9463412761688232, 'acc': 0.4375, 'step': 223},\n",
       "  {'loss': 1.9733929634094238, 'acc': 0.34375, 'step': 224},\n",
       "  {'loss': 1.9162205457687378, 'acc': 0.46875, 'step': 225},\n",
       "  {'loss': 1.9275320768356323, 'acc': 0.3125, 'step': 226},\n",
       "  {'loss': 2.056440591812134, 'acc': 0.15625, 'step': 227},\n",
       "  {'loss': 1.8825751543045044, 'acc': 0.53125, 'step': 228},\n",
       "  {'loss': 1.899846076965332, 'acc': 0.40625, 'step': 229},\n",
       "  {'loss': 1.8750566244125366, 'acc': 0.34375, 'step': 230},\n",
       "  {'loss': 1.9306361675262451, 'acc': 0.34375, 'step': 231},\n",
       "  {'loss': 1.9395850896835327, 'acc': 0.40625, 'step': 232},\n",
       "  {'loss': 1.8805938959121704, 'acc': 0.375, 'step': 233},\n",
       "  {'loss': 1.8641612529754639, 'acc': 0.4375, 'step': 234},\n",
       "  {'loss': 1.8869616985321045, 'acc': 0.46875, 'step': 235},\n",
       "  {'loss': 1.9212181568145752, 'acc': 0.5, 'step': 236},\n",
       "  {'loss': 1.856879472732544, 'acc': 0.5, 'step': 237},\n",
       "  {'loss': 1.8971006870269775, 'acc': 0.53125, 'step': 238},\n",
       "  {'loss': 1.816655158996582, 'acc': 0.5, 'step': 239},\n",
       "  {'loss': 1.89598548412323, 'acc': 0.375, 'step': 240},\n",
       "  {'loss': 1.7965731620788574, 'acc': 0.5, 'step': 241},\n",
       "  {'loss': 1.9147918224334717, 'acc': 0.34375, 'step': 242},\n",
       "  {'loss': 1.8860547542572021, 'acc': 0.4375, 'step': 243},\n",
       "  {'loss': 1.918032169342041, 'acc': 0.40625, 'step': 244},\n",
       "  {'loss': 1.9347634315490723, 'acc': 0.28125, 'step': 245},\n",
       "  {'loss': 1.8931963443756104, 'acc': 0.34375, 'step': 246},\n",
       "  {'loss': 1.873538613319397, 'acc': 0.40625, 'step': 247},\n",
       "  {'loss': 1.8473882675170898, 'acc': 0.40625, 'step': 248},\n",
       "  {'loss': 1.940545916557312, 'acc': 0.375, 'step': 249},\n",
       "  {'loss': 1.8325490951538086, 'acc': 0.40625, 'step': 250},\n",
       "  {'loss': 1.8865677118301392, 'acc': 0.4375, 'step': 251},\n",
       "  {'loss': 1.914703369140625, 'acc': 0.40625, 'step': 252},\n",
       "  {'loss': 1.817708969116211, 'acc': 0.40625, 'step': 253},\n",
       "  {'loss': 1.779393196105957, 'acc': 0.40625, 'step': 254},\n",
       "  {'loss': 1.8620102405548096, 'acc': 0.4375, 'step': 255},\n",
       "  {'loss': 1.8692172765731812, 'acc': 0.28125, 'step': 256},\n",
       "  {'loss': 1.8775956630706787, 'acc': 0.34375, 'step': 257},\n",
       "  {'loss': 1.7977393865585327, 'acc': 0.5625, 'step': 258},\n",
       "  {'loss': 1.8107436895370483, 'acc': 0.46875, 'step': 259},\n",
       "  {'loss': 1.787324070930481, 'acc': 0.375, 'step': 260},\n",
       "  {'loss': 1.8395099639892578, 'acc': 0.40625, 'step': 261},\n",
       "  {'loss': 1.7902371883392334, 'acc': 0.46875, 'step': 262},\n",
       "  {'loss': 1.7854269742965698, 'acc': 0.40625, 'step': 263},\n",
       "  {'loss': 1.763775110244751, 'acc': 0.59375, 'step': 264},\n",
       "  {'loss': 1.9006614685058594, 'acc': 0.4375, 'step': 265},\n",
       "  {'loss': 1.7826839685440063, 'acc': 0.53125, 'step': 266},\n",
       "  {'loss': 1.819711685180664, 'acc': 0.34375, 'step': 267},\n",
       "  {'loss': 1.839763879776001, 'acc': 0.4375, 'step': 268},\n",
       "  {'loss': 1.9312043190002441, 'acc': 0.34375, 'step': 269},\n",
       "  {'loss': 1.7658241987228394, 'acc': 0.53125, 'step': 270},\n",
       "  {'loss': 1.6855405569076538, 'acc': 0.46875, 'step': 271},\n",
       "  {'loss': 1.7926889657974243, 'acc': 0.34375, 'step': 272},\n",
       "  {'loss': 1.728086233139038, 'acc': 0.53125, 'step': 273},\n",
       "  {'loss': 1.787818193435669, 'acc': 0.4375, 'step': 274},\n",
       "  {'loss': 1.7163881063461304, 'acc': 0.53125, 'step': 275},\n",
       "  {'loss': 1.76661217212677, 'acc': 0.46875, 'step': 276},\n",
       "  {'loss': 1.8217798471450806, 'acc': 0.40625, 'step': 277},\n",
       "  {'loss': 1.7352221012115479, 'acc': 0.40625, 'step': 278},\n",
       "  {'loss': 1.7869305610656738, 'acc': 0.5, 'step': 279},\n",
       "  {'loss': 1.8555833101272583, 'acc': 0.34375, 'step': 280},\n",
       "  {'loss': 1.7802071571350098, 'acc': 0.4375, 'step': 281},\n",
       "  {'loss': 1.6912696361541748, 'acc': 0.5, 'step': 282},\n",
       "  {'loss': 1.6664894819259644, 'acc': 0.625, 'step': 283},\n",
       "  {'loss': 1.7427806854248047, 'acc': 0.375, 'step': 284},\n",
       "  {'loss': 1.7204822301864624, 'acc': 0.46875, 'step': 285},\n",
       "  {'loss': 1.7952184677124023, 'acc': 0.40625, 'step': 286},\n",
       "  {'loss': 1.69327974319458, 'acc': 0.5, 'step': 287},\n",
       "  {'loss': 1.7078698873519897, 'acc': 0.4375, 'step': 288},\n",
       "  {'loss': 1.7391785383224487, 'acc': 0.40625, 'step': 289},\n",
       "  {'loss': 1.6800073385238647, 'acc': 0.625, 'step': 290},\n",
       "  {'loss': 1.7855926752090454, 'acc': 0.40625, 'step': 291},\n",
       "  {'loss': 1.6233911514282227, 'acc': 0.59375, 'step': 292},\n",
       "  {'loss': 1.7820707559585571, 'acc': 0.40625, 'step': 293},\n",
       "  {'loss': 1.707101821899414, 'acc': 0.4375, 'step': 294},\n",
       "  {'loss': 1.6645036935806274, 'acc': 0.5625, 'step': 295},\n",
       "  {'loss': 1.8408868312835693, 'acc': 0.3125, 'step': 296},\n",
       "  {'loss': 1.695722222328186, 'acc': 0.375, 'step': 297},\n",
       "  {'loss': 1.6580291986465454, 'acc': 0.5625, 'step': 298},\n",
       "  {'loss': 1.6037846803665161, 'acc': 0.65625, 'step': 299},\n",
       "  {'loss': 1.8046842813491821, 'acc': 0.46875, 'step': 300},\n",
       "  {'loss': 1.7905406951904297, 'acc': 0.375, 'step': 301},\n",
       "  {'loss': 1.632307767868042, 'acc': 0.5, 'step': 302},\n",
       "  {'loss': 1.8117609024047852, 'acc': 0.34375, 'step': 303},\n",
       "  {'loss': 1.7359014749526978, 'acc': 0.5, 'step': 304},\n",
       "  {'loss': 1.6075397729873657, 'acc': 0.5, 'step': 305},\n",
       "  {'loss': 1.6899192333221436, 'acc': 0.625, 'step': 306},\n",
       "  {'loss': 1.6963530778884888, 'acc': 0.46875, 'step': 307},\n",
       "  {'loss': 1.5507844686508179, 'acc': 0.625, 'step': 308},\n",
       "  {'loss': 1.6562747955322266, 'acc': 0.625, 'step': 309},\n",
       "  {'loss': 1.6287238597869873, 'acc': 0.40625, 'step': 310},\n",
       "  {'loss': 1.6967862844467163, 'acc': 0.4375, 'step': 311},\n",
       "  {'loss': 1.8025224208831787, 'acc': 0.5625, 'step': 312},\n",
       "  {'loss': 1.6582051515579224, 'acc': 0.5625, 'step': 313},\n",
       "  {'loss': 1.6879502534866333, 'acc': 0.5, 'step': 314},\n",
       "  {'loss': 1.601584553718567, 'acc': 0.65625, 'step': 315},\n",
       "  {'loss': 1.749326229095459, 'acc': 0.46875, 'step': 316},\n",
       "  {'loss': 1.5945426225662231, 'acc': 0.4375, 'step': 317},\n",
       "  {'loss': 1.5749659538269043, 'acc': 0.59375, 'step': 318},\n",
       "  {'loss': 1.621239185333252, 'acc': 0.59375, 'step': 319},\n",
       "  {'loss': 1.6693257093429565, 'acc': 0.5, 'step': 320},\n",
       "  {'loss': 1.6223446130752563, 'acc': 0.40625, 'step': 321},\n",
       "  {'loss': 1.5936236381530762, 'acc': 0.5625, 'step': 322},\n",
       "  {'loss': 1.679882287979126, 'acc': 0.3125, 'step': 323},\n",
       "  {'loss': 1.6275779008865356, 'acc': 0.4375, 'step': 324},\n",
       "  {'loss': 1.572877049446106, 'acc': 0.5625, 'step': 325},\n",
       "  {'loss': 1.5233491659164429, 'acc': 0.53125, 'step': 326},\n",
       "  {'loss': 1.5948256254196167, 'acc': 0.4375, 'step': 327},\n",
       "  {'loss': 1.5265480279922485, 'acc': 0.46875, 'step': 328},\n",
       "  {'loss': 1.6274614334106445, 'acc': 0.40625, 'step': 329},\n",
       "  {'loss': 1.5696985721588135, 'acc': 0.53125, 'step': 330},\n",
       "  {'loss': 1.5625545978546143, 'acc': 0.625, 'step': 331},\n",
       "  {'loss': 1.581731915473938, 'acc': 0.4375, 'step': 332},\n",
       "  {'loss': 1.5251832008361816, 'acc': 0.53125, 'step': 333},\n",
       "  {'loss': 1.5260697603225708, 'acc': 0.5625, 'step': 334},\n",
       "  {'loss': 1.5917680263519287, 'acc': 0.5625, 'step': 335},\n",
       "  {'loss': 1.5964610576629639, 'acc': 0.5, 'step': 336},\n",
       "  {'loss': 1.5050181150436401, 'acc': 0.53125, 'step': 337},\n",
       "  {'loss': 1.5845369100570679, 'acc': 0.46875, 'step': 338},\n",
       "  {'loss': 1.6526349782943726, 'acc': 0.40625, 'step': 339},\n",
       "  {'loss': 1.5370442867279053, 'acc': 0.625, 'step': 340},\n",
       "  {'loss': 1.59096360206604, 'acc': 0.4375, 'step': 341},\n",
       "  {'loss': 1.554002285003662, 'acc': 0.65625, 'step': 342},\n",
       "  {'loss': 1.353762149810791, 'acc': 0.5625, 'step': 343},\n",
       "  {'loss': 1.63937509059906, 'acc': 0.5, 'step': 344},\n",
       "  {'loss': 1.4634718894958496, 'acc': 0.53125, 'step': 345},\n",
       "  {'loss': 1.6135326623916626, 'acc': 0.46875, 'step': 346},\n",
       "  {'loss': 1.4889823198318481, 'acc': 0.4375, 'step': 347},\n",
       "  {'loss': 1.5237061977386475, 'acc': 0.53125, 'step': 348},\n",
       "  {'loss': 1.5773367881774902, 'acc': 0.5625, 'step': 349},\n",
       "  {'loss': 1.5509933233261108, 'acc': 0.53125, 'step': 350},\n",
       "  {'loss': 1.5583220720291138, 'acc': 0.46875, 'step': 351},\n",
       "  {'loss': 1.4937560558319092, 'acc': 0.625, 'step': 352},\n",
       "  {'loss': 1.3165475130081177, 'acc': 0.78125, 'step': 353},\n",
       "  {'loss': 1.520572304725647, 'acc': 0.46875, 'step': 354},\n",
       "  {'loss': 1.3887381553649902, 'acc': 0.6875, 'step': 355},\n",
       "  {'loss': 1.5160999298095703, 'acc': 0.53125, 'step': 356},\n",
       "  {'loss': 1.4119958877563477, 'acc': 0.6875, 'step': 357},\n",
       "  {'loss': 1.5538276433944702, 'acc': 0.59375, 'step': 358},\n",
       "  {'loss': 1.524377703666687, 'acc': 0.5, 'step': 359},\n",
       "  {'loss': 1.4536596536636353, 'acc': 0.53125, 'step': 360},\n",
       "  {'loss': 1.4713220596313477, 'acc': 0.53125, 'step': 361},\n",
       "  {'loss': 1.4297369718551636, 'acc': 0.5625, 'step': 362},\n",
       "  {'loss': 1.4267343282699585, 'acc': 0.59375, 'step': 363},\n",
       "  {'loss': 1.5038533210754395, 'acc': 0.53125, 'step': 364},\n",
       "  {'loss': 1.5523061752319336, 'acc': 0.5, 'step': 365},\n",
       "  {'loss': 1.5317097902297974, 'acc': 0.46875, 'step': 366},\n",
       "  {'loss': 1.4457792043685913, 'acc': 0.59375, 'step': 367},\n",
       "  {'loss': 1.3964329957962036, 'acc': 0.75, 'step': 368},\n",
       "  {'loss': 1.4876471757888794, 'acc': 0.5625, 'step': 369},\n",
       "  {'loss': 1.412090539932251, 'acc': 0.5625, 'step': 370},\n",
       "  {'loss': 1.5298274755477905, 'acc': 0.46875, 'step': 371},\n",
       "  {'loss': 1.4795066118240356, 'acc': 0.625, 'step': 372},\n",
       "  {'loss': 1.4014848470687866, 'acc': 0.65625, 'step': 373},\n",
       "  {'loss': 1.3345948457717896, 'acc': 0.65625, 'step': 374},\n",
       "  {'loss': 1.5727603435516357, 'acc': 0.625, 'step': 375},\n",
       "  {'loss': 1.4520611763000488, 'acc': 0.65625, 'step': 376},\n",
       "  {'loss': 1.4143567085266113, 'acc': 0.625, 'step': 377},\n",
       "  {'loss': 1.344732642173767, 'acc': 0.59375, 'step': 378},\n",
       "  {'loss': 1.3386565446853638, 'acc': 0.625, 'step': 379},\n",
       "  {'loss': 1.4794037342071533, 'acc': 0.5, 'step': 380},\n",
       "  {'loss': 1.433936595916748, 'acc': 0.53125, 'step': 381},\n",
       "  {'loss': 1.398627519607544, 'acc': 0.53125, 'step': 382},\n",
       "  {'loss': 1.3625032901763916, 'acc': 0.625, 'step': 383},\n",
       "  {'loss': 1.3906662464141846, 'acc': 0.5, 'step': 384},\n",
       "  {'loss': 1.2094589471817017, 'acc': 0.75, 'step': 385},\n",
       "  {'loss': 1.3850760459899902, 'acc': 0.59375, 'step': 386},\n",
       "  {'loss': 1.4486188888549805, 'acc': 0.59375, 'step': 387},\n",
       "  {'loss': 1.3651701211929321, 'acc': 0.59375, 'step': 388},\n",
       "  {'loss': 1.4418443441390991, 'acc': 0.53125, 'step': 389},\n",
       "  {'loss': 1.4773237705230713, 'acc': 0.5625, 'step': 390},\n",
       "  {'loss': 1.4595638513565063, 'acc': 0.46875, 'step': 391},\n",
       "  {'loss': 1.401934027671814, 'acc': 0.59375, 'step': 392},\n",
       "  {'loss': 1.3460547924041748, 'acc': 0.65625, 'step': 393},\n",
       "  {'loss': 1.4066580533981323, 'acc': 0.53125, 'step': 394},\n",
       "  {'loss': 1.306759238243103, 'acc': 0.59375, 'step': 395},\n",
       "  {'loss': 1.2983005046844482, 'acc': 0.59375, 'step': 396},\n",
       "  {'loss': 1.3712530136108398, 'acc': 0.75, 'step': 397},\n",
       "  {'loss': 1.4379669427871704, 'acc': 0.40625, 'step': 398},\n",
       "  {'loss': 1.384748101234436, 'acc': 0.5625, 'step': 399},\n",
       "  {'loss': 1.3624343872070312, 'acc': 0.625, 'step': 400},\n",
       "  {'loss': 1.429406762123108, 'acc': 0.625, 'step': 401},\n",
       "  {'loss': 1.284044623374939, 'acc': 0.53125, 'step': 402},\n",
       "  {'loss': 1.358076572418213, 'acc': 0.5, 'step': 403},\n",
       "  {'loss': 1.2710307836532593, 'acc': 0.59375, 'step': 404},\n",
       "  {'loss': 1.2834527492523193, 'acc': 0.46875, 'step': 405},\n",
       "  {'loss': 1.3311794996261597, 'acc': 0.53125, 'step': 406},\n",
       "  {'loss': 1.4257549047470093, 'acc': 0.5625, 'step': 407},\n",
       "  {'loss': 1.22958242893219, 'acc': 0.71875, 'step': 408},\n",
       "  {'loss': 1.474449872970581, 'acc': 0.5, 'step': 409},\n",
       "  {'loss': 1.5373097658157349, 'acc': 0.4375, 'step': 410},\n",
       "  {'loss': 1.3575525283813477, 'acc': 0.5, 'step': 411},\n",
       "  {'loss': 1.2750215530395508, 'acc': 0.59375, 'step': 412},\n",
       "  {'loss': 1.338568091392517, 'acc': 0.625, 'step': 413},\n",
       "  {'loss': 1.4422932863235474, 'acc': 0.40625, 'step': 414},\n",
       "  {'loss': 1.2193769216537476, 'acc': 0.6875, 'step': 415},\n",
       "  {'loss': 1.2321233749389648, 'acc': 0.65625, 'step': 416},\n",
       "  {'loss': 1.314141869544983, 'acc': 0.625, 'step': 417},\n",
       "  {'loss': 1.2249259948730469, 'acc': 0.625, 'step': 418},\n",
       "  {'loss': 1.421390175819397, 'acc': 0.5, 'step': 419},\n",
       "  {'loss': 1.179850697517395, 'acc': 0.59375, 'step': 420},\n",
       "  {'loss': 1.2393616437911987, 'acc': 0.53125, 'step': 421},\n",
       "  {'loss': 1.3082456588745117, 'acc': 0.59375, 'step': 422},\n",
       "  {'loss': 1.2119561433792114, 'acc': 0.8125, 'step': 423},\n",
       "  {'loss': 1.3402595520019531, 'acc': 0.5, 'step': 424},\n",
       "  {'loss': 1.3774678707122803, 'acc': 0.53125, 'step': 425},\n",
       "  {'loss': 1.1919782161712646, 'acc': 0.65625, 'step': 426},\n",
       "  {'loss': 1.255557656288147, 'acc': 0.65625, 'step': 427},\n",
       "  {'loss': 1.1499338150024414, 'acc': 0.6875, 'step': 428},\n",
       "  {'loss': 1.3284249305725098, 'acc': 0.6875, 'step': 429},\n",
       "  {'loss': 1.2889355421066284, 'acc': 0.625, 'step': 430},\n",
       "  {'loss': 1.1761606931686401, 'acc': 0.5625, 'step': 431},\n",
       "  {'loss': 1.2915948629379272, 'acc': 0.5625, 'step': 432},\n",
       "  {'loss': 1.2910072803497314, 'acc': 0.5625, 'step': 433},\n",
       "  {'loss': 1.3244152069091797, 'acc': 0.65625, 'step': 434},\n",
       "  {'loss': 1.2142648696899414, 'acc': 0.5625, 'step': 435},\n",
       "  {'loss': 1.2555301189422607, 'acc': 0.59375, 'step': 436},\n",
       "  {'loss': 1.2052327394485474, 'acc': 0.65625, 'step': 437},\n",
       "  {'loss': 1.2987267971038818, 'acc': 0.59375, 'step': 438},\n",
       "  {'loss': 1.1518903970718384, 'acc': 0.65625, 'step': 439},\n",
       "  {'loss': 1.3336533308029175, 'acc': 0.59375, 'step': 440},\n",
       "  {'loss': 1.2133731842041016, 'acc': 0.6875, 'step': 441},\n",
       "  {'loss': 1.3720704317092896, 'acc': 0.5625, 'step': 442},\n",
       "  {'loss': 1.2508714199066162, 'acc': 0.5625, 'step': 443},\n",
       "  {'loss': 1.234045386314392, 'acc': 0.53125, 'step': 444},\n",
       "  {'loss': 1.2144780158996582, 'acc': 0.65625, 'step': 445},\n",
       "  {'loss': 1.2397819757461548, 'acc': 0.65625, 'step': 446},\n",
       "  {'loss': 1.3245584964752197, 'acc': 0.5625, 'step': 447},\n",
       "  {'loss': 1.3430662155151367, 'acc': 0.5625, 'step': 448},\n",
       "  {'loss': 1.2283600568771362, 'acc': 0.625, 'step': 449},\n",
       "  {'loss': 1.1645009517669678, 'acc': 0.6875, 'step': 450},\n",
       "  {'loss': 1.1838234663009644, 'acc': 0.59375, 'step': 451},\n",
       "  {'loss': 1.2408089637756348, 'acc': 0.625, 'step': 452},\n",
       "  {'loss': 1.0953772068023682, 'acc': 0.71875, 'step': 453},\n",
       "  {'loss': 1.3236809968948364, 'acc': 0.5625, 'step': 454},\n",
       "  {'loss': 1.219739317893982, 'acc': 0.5625, 'step': 455},\n",
       "  {'loss': 1.2920798063278198, 'acc': 0.5625, 'step': 456},\n",
       "  {'loss': 1.2409400939941406, 'acc': 0.5625, 'step': 457},\n",
       "  {'loss': 1.3139253854751587, 'acc': 0.5625, 'step': 458},\n",
       "  {'loss': 1.107945442199707, 'acc': 0.71875, 'step': 459},\n",
       "  {'loss': 1.2289619445800781, 'acc': 0.65625, 'step': 460},\n",
       "  {'loss': 1.2711846828460693, 'acc': 0.6875, 'step': 461},\n",
       "  {'loss': 1.4109455347061157, 'acc': 0.5625, 'step': 462},\n",
       "  {'loss': 1.1416702270507812, 'acc': 0.6875, 'step': 463},\n",
       "  {'loss': 1.155951738357544, 'acc': 0.65625, 'step': 464},\n",
       "  {'loss': 1.3468927145004272, 'acc': 0.46875, 'step': 465},\n",
       "  {'loss': 1.206148386001587, 'acc': 0.5625, 'step': 466},\n",
       "  {'loss': 1.2797884941101074, 'acc': 0.5625, 'step': 467},\n",
       "  {'loss': 1.1396524906158447, 'acc': 0.59375, 'step': 468},\n",
       "  {'loss': 1.1797820329666138, 'acc': 0.53125, 'step': 469},\n",
       "  {'loss': 1.1580963134765625, 'acc': 0.59375, 'step': 470},\n",
       "  {'loss': 1.0461245775222778, 'acc': 0.65625, 'step': 471},\n",
       "  {'loss': 1.2365378141403198, 'acc': 0.53125, 'step': 472},\n",
       "  {'loss': 1.2702076435089111, 'acc': 0.53125, 'step': 473},\n",
       "  {'loss': 1.1583046913146973, 'acc': 0.5625, 'step': 474},\n",
       "  {'loss': 1.3289258480072021, 'acc': 0.625, 'step': 475},\n",
       "  {'loss': 1.1472784280776978, 'acc': 0.59375, 'step': 476},\n",
       "  {'loss': 1.2061245441436768, 'acc': 0.5625, 'step': 477},\n",
       "  {'loss': 1.1350096464157104, 'acc': 0.75, 'step': 478},\n",
       "  {'loss': 1.1671676635742188, 'acc': 0.59375, 'step': 479},\n",
       "  {'loss': 1.2267062664031982, 'acc': 0.5625, 'step': 480},\n",
       "  {'loss': 1.1288840770721436, 'acc': 0.6875, 'step': 481},\n",
       "  {'loss': 1.3315790891647339, 'acc': 0.5625, 'step': 482},\n",
       "  {'loss': 1.1102005243301392, 'acc': 0.59375, 'step': 483},\n",
       "  {'loss': 1.300511360168457, 'acc': 0.53125, 'step': 484},\n",
       "  {'loss': 1.028550386428833, 'acc': 0.71875, 'step': 485},\n",
       "  {'loss': 1.107714295387268, 'acc': 0.59375, 'step': 486},\n",
       "  {'loss': 1.103988766670227, 'acc': 0.6875, 'step': 487},\n",
       "  {'loss': 1.1234360933303833, 'acc': 0.6875, 'step': 488},\n",
       "  {'loss': 1.1607847213745117, 'acc': 0.5625, 'step': 489},\n",
       "  {'loss': 1.2654180526733398, 'acc': 0.59375, 'step': 490},\n",
       "  {'loss': 1.1210110187530518, 'acc': 0.59375, 'step': 491},\n",
       "  {'loss': 1.1492470502853394, 'acc': 0.53125, 'step': 492},\n",
       "  {'loss': 1.1085411310195923, 'acc': 0.59375, 'step': 493},\n",
       "  {'loss': 1.1001780033111572, 'acc': 0.59375, 'step': 494},\n",
       "  {'loss': 1.0825204849243164, 'acc': 0.65625, 'step': 495},\n",
       "  {'loss': 1.0892283916473389, 'acc': 0.5625, 'step': 496},\n",
       "  {'loss': 1.258590817451477, 'acc': 0.59375, 'step': 497},\n",
       "  {'loss': 1.157928228378296, 'acc': 0.5625, 'step': 498},\n",
       "  {'loss': 1.1360280513763428, 'acc': 0.6875, 'step': 499},\n",
       "  {'loss': 1.0193016529083252, 'acc': 0.75, 'step': 500},\n",
       "  {'loss': 1.1235722303390503, 'acc': 0.65625, 'step': 501},\n",
       "  {'loss': 1.2561719417572021, 'acc': 0.46875, 'step': 502},\n",
       "  {'loss': 1.0734843015670776, 'acc': 0.71875, 'step': 503},\n",
       "  {'loss': 1.115615725517273, 'acc': 0.6875, 'step': 504},\n",
       "  {'loss': 1.1081162691116333, 'acc': 0.53125, 'step': 505},\n",
       "  {'loss': 1.1303855180740356, 'acc': 0.65625, 'step': 506},\n",
       "  {'loss': 1.2568835020065308, 'acc': 0.53125, 'step': 507},\n",
       "  {'loss': 1.2584000825881958, 'acc': 0.59375, 'step': 508},\n",
       "  {'loss': 1.1707146167755127, 'acc': 0.59375, 'step': 509},\n",
       "  {'loss': 1.136021614074707, 'acc': 0.59375, 'step': 510},\n",
       "  {'loss': 1.0736088752746582, 'acc': 0.59375, 'step': 511},\n",
       "  {'loss': 1.2069610357284546, 'acc': 0.65625, 'step': 512},\n",
       "  {'loss': 1.2195241451263428, 'acc': 0.46875, 'step': 513},\n",
       "  {'loss': 1.2276604175567627, 'acc': 0.5, 'step': 514},\n",
       "  {'loss': 1.013625144958496, 'acc': 0.71875, 'step': 515},\n",
       "  {'loss': 1.2930867671966553, 'acc': 0.53125, 'step': 516},\n",
       "  {'loss': 1.0582376718521118, 'acc': 0.65625, 'step': 517},\n",
       "  {'loss': 1.1900255680084229, 'acc': 0.59375, 'step': 518},\n",
       "  {'loss': 1.048272967338562, 'acc': 0.65625, 'step': 519},\n",
       "  {'loss': 1.2758910655975342, 'acc': 0.65625, 'step': 520},\n",
       "  {'loss': 1.116284966468811, 'acc': 0.5625, 'step': 521},\n",
       "  {'loss': 1.0140180587768555, 'acc': 0.5625, 'step': 522},\n",
       "  {'loss': 1.1375558376312256, 'acc': 0.65625, 'step': 523},\n",
       "  {'loss': 1.0616555213928223, 'acc': 0.75, 'step': 524},\n",
       "  {'loss': 0.971519410610199, 'acc': 0.75, 'step': 525},\n",
       "  {'loss': 1.0700087547302246, 'acc': 0.625, 'step': 526},\n",
       "  {'loss': 1.0985140800476074, 'acc': 0.65625, 'step': 527},\n",
       "  {'loss': 1.1679716110229492, 'acc': 0.59375, 'step': 528},\n",
       "  {'loss': 1.218027949333191, 'acc': 0.53125, 'step': 529},\n",
       "  {'loss': 1.2089548110961914, 'acc': 0.53125, 'step': 530},\n",
       "  {'loss': 1.0644704103469849, 'acc': 0.625, 'step': 531},\n",
       "  {'loss': 1.2668176889419556, 'acc': 0.4375, 'step': 532},\n",
       "  {'loss': 1.0960321426391602, 'acc': 0.5625, 'step': 533},\n",
       "  {'loss': 1.1429625749588013, 'acc': 0.75, 'step': 534},\n",
       "  {'loss': 1.0976465940475464, 'acc': 0.625, 'step': 535},\n",
       "  {'loss': 0.9182164072990417, 'acc': 0.84375, 'step': 536},\n",
       "  {'loss': 1.3111093044281006, 'acc': 0.46875, 'step': 537},\n",
       "  {'loss': 1.0362167358398438, 'acc': 0.65625, 'step': 538},\n",
       "  {'loss': 1.32379150390625, 'acc': 0.53125, 'step': 539},\n",
       "  {'loss': 1.077865481376648, 'acc': 0.625, 'step': 540},\n",
       "  {'loss': 1.0796270370483398, 'acc': 0.65625, 'step': 541},\n",
       "  {'loss': 0.9911460876464844, 'acc': 0.625, 'step': 542},\n",
       "  {'loss': 1.0852034091949463, 'acc': 0.59375, 'step': 543},\n",
       "  {'loss': 0.9745643734931946, 'acc': 0.75, 'step': 544},\n",
       "  {'loss': 1.007468581199646, 'acc': 0.65625, 'step': 545},\n",
       "  {'loss': 1.096380352973938, 'acc': 0.5625, 'step': 546},\n",
       "  {'loss': 1.079451322555542, 'acc': 0.71875, 'step': 547},\n",
       "  {'loss': 1.0616995096206665, 'acc': 0.59375, 'step': 548},\n",
       "  {'loss': 1.131405234336853, 'acc': 0.625, 'step': 549},\n",
       "  {'loss': 1.0856796503067017, 'acc': 0.6875, 'step': 550},\n",
       "  {'loss': 0.8943369388580322, 'acc': 0.78125, 'step': 551},\n",
       "  {'loss': 0.9957379102706909, 'acc': 0.59375, 'step': 552},\n",
       "  {'loss': 1.180954098701477, 'acc': 0.59375, 'step': 553},\n",
       "  {'loss': 1.067568302154541, 'acc': 0.6875, 'step': 554},\n",
       "  {'loss': 1.0246878862380981, 'acc': 0.65625, 'step': 555},\n",
       "  {'loss': 1.055151104927063, 'acc': 0.59375, 'step': 556},\n",
       "  {'loss': 1.1769697666168213, 'acc': 0.65625, 'step': 557},\n",
       "  {'loss': 1.0484360456466675, 'acc': 0.71875, 'step': 558},\n",
       "  {'loss': 0.9217144250869751, 'acc': 0.71875, 'step': 559},\n",
       "  {'loss': 1.1348084211349487, 'acc': 0.5625, 'step': 560},\n",
       "  {'loss': 1.1040847301483154, 'acc': 0.625, 'step': 561},\n",
       "  {'loss': 1.2727482318878174, 'acc': 0.40625, 'step': 562},\n",
       "  {'loss': 1.1093037128448486, 'acc': 0.53125, 'step': 563},\n",
       "  {'loss': 1.4037128686904907, 'acc': 0.53125, 'step': 564},\n",
       "  {'loss': 0.9853613376617432, 'acc': 0.625, 'step': 565},\n",
       "  {'loss': 1.0389567613601685, 'acc': 0.65625, 'step': 566},\n",
       "  {'loss': 1.1755211353302002, 'acc': 0.5625, 'step': 567},\n",
       "  {'loss': 1.033075213432312, 'acc': 0.75, 'step': 568},\n",
       "  {'loss': 0.8818433880805969, 'acc': 0.78125, 'step': 569},\n",
       "  {'loss': 1.1927095651626587, 'acc': 0.5625, 'step': 570},\n",
       "  {'loss': 1.158223032951355, 'acc': 0.625, 'step': 571},\n",
       "  {'loss': 1.1933441162109375, 'acc': 0.46875, 'step': 572},\n",
       "  {'loss': 1.0870060920715332, 'acc': 0.5625, 'step': 573},\n",
       "  {'loss': 1.1004596948623657, 'acc': 0.59375, 'step': 574},\n",
       "  {'loss': 0.8125816583633423, 'acc': 0.75, 'step': 575},\n",
       "  {'loss': 1.2254050970077515, 'acc': 0.4375, 'step': 576},\n",
       "  {'loss': 1.1737480163574219, 'acc': 0.5625, 'step': 577},\n",
       "  {'loss': 1.0322011709213257, 'acc': 0.625, 'step': 578},\n",
       "  {'loss': 0.9564055800437927, 'acc': 0.75, 'step': 579},\n",
       "  {'loss': 1.039646863937378, 'acc': 0.65625, 'step': 580},\n",
       "  {'loss': 1.1154565811157227, 'acc': 0.5625, 'step': 581},\n",
       "  {'loss': 0.9994947910308838, 'acc': 0.65625, 'step': 582},\n",
       "  {'loss': 0.8756023049354553, 'acc': 0.78125, 'step': 583},\n",
       "  {'loss': 1.018249273300171, 'acc': 0.59375, 'step': 584},\n",
       "  {'loss': 1.0270192623138428, 'acc': 0.59375, 'step': 585},\n",
       "  {'loss': 1.0702881813049316, 'acc': 0.53125, 'step': 586},\n",
       "  {'loss': 1.2811853885650635, 'acc': 0.4375, 'step': 587},\n",
       "  {'loss': 1.0205503702163696, 'acc': 0.625, 'step': 588},\n",
       "  {'loss': 1.1260619163513184, 'acc': 0.53125, 'step': 589},\n",
       "  {'loss': 0.9329029321670532, 'acc': 0.6875, 'step': 590},\n",
       "  {'loss': 1.2538255453109741, 'acc': 0.53125, 'step': 591},\n",
       "  {'loss': 1.0204018354415894, 'acc': 0.71875, 'step': 592},\n",
       "  {'loss': 0.8971799612045288, 'acc': 0.71875, 'step': 593},\n",
       "  {'loss': 0.9214657545089722, 'acc': 0.78125, 'step': 594},\n",
       "  {'loss': 1.0622713565826416, 'acc': 0.59375, 'step': 595},\n",
       "  {'loss': 1.0507354736328125, 'acc': 0.71875, 'step': 596},\n",
       "  {'loss': 1.2792184352874756, 'acc': 0.5, 'step': 597},\n",
       "  {'loss': 1.3335157632827759, 'acc': 0.5, 'step': 598},\n",
       "  {'loss': 1.3321185111999512, 'acc': 0.4375, 'step': 599},\n",
       "  {'loss': 0.9988049864768982, 'acc': 0.65625, 'step': 600},\n",
       "  {'loss': 0.9846911430358887, 'acc': 0.71875, 'step': 601},\n",
       "  {'loss': 1.0271148681640625, 'acc': 0.75, 'step': 602},\n",
       "  {'loss': 1.0584497451782227, 'acc': 0.59375, 'step': 603},\n",
       "  {'loss': 1.1340973377227783, 'acc': 0.65625, 'step': 604},\n",
       "  {'loss': 1.0347390174865723, 'acc': 0.5625, 'step': 605},\n",
       "  {'loss': 0.9581384062767029, 'acc': 0.6875, 'step': 606},\n",
       "  {'loss': 0.8097029328346252, 'acc': 0.78125, 'step': 607},\n",
       "  {'loss': 1.1045868396759033, 'acc': 0.65625, 'step': 608},\n",
       "  {'loss': 1.163316249847412, 'acc': 0.75, 'step': 609},\n",
       "  {'loss': 0.8376321792602539, 'acc': 0.6875, 'step': 610},\n",
       "  {'loss': 0.7513160705566406, 'acc': 0.78125, 'step': 611},\n",
       "  {'loss': 1.177464485168457, 'acc': 0.53125, 'step': 612},\n",
       "  {'loss': 0.9281274080276489, 'acc': 0.6875, 'step': 613},\n",
       "  {'loss': 1.1202833652496338, 'acc': 0.5625, 'step': 614},\n",
       "  {'loss': 1.0335232019424438, 'acc': 0.625, 'step': 615},\n",
       "  {'loss': 0.9258050918579102, 'acc': 0.6875, 'step': 616},\n",
       "  {'loss': 0.8762704730033875, 'acc': 0.6875, 'step': 617},\n",
       "  {'loss': 1.0795609951019287, 'acc': 0.59375, 'step': 618},\n",
       "  {'loss': 1.0246729850769043, 'acc': 0.65625, 'step': 619},\n",
       "  {'loss': 0.7692169547080994, 'acc': 0.84375, 'step': 620},\n",
       "  {'loss': 1.0752235651016235, 'acc': 0.5, 'step': 621},\n",
       "  {'loss': 0.981289267539978, 'acc': 0.5625, 'step': 622},\n",
       "  {'loss': 0.9039599299430847, 'acc': 0.625, 'step': 623},\n",
       "  {'loss': 0.9738208055496216, 'acc': 0.59375, 'step': 624},\n",
       "  {'loss': 0.8569706678390503, 'acc': 0.8125, 'step': 625},\n",
       "  {'loss': 1.0766675472259521, 'acc': 0.59375, 'step': 626},\n",
       "  {'loss': 1.0058677196502686, 'acc': 0.65625, 'step': 627},\n",
       "  {'loss': 1.0866228342056274, 'acc': 0.53125, 'step': 628},\n",
       "  {'loss': 1.061273217201233, 'acc': 0.71875, 'step': 629},\n",
       "  {'loss': 1.0286356210708618, 'acc': 0.625, 'step': 630},\n",
       "  {'loss': 0.8154574632644653, 'acc': 0.8125, 'step': 631},\n",
       "  {'loss': 0.998711884021759, 'acc': 0.65625, 'step': 632},\n",
       "  {'loss': 1.0588176250457764, 'acc': 0.6875, 'step': 633},\n",
       "  {'loss': 0.9159513115882874, 'acc': 0.6875, 'step': 634},\n",
       "  {'loss': 1.1497136354446411, 'acc': 0.5, 'step': 635},\n",
       "  {'loss': 0.9830315709114075, 'acc': 0.6875, 'step': 636},\n",
       "  {'loss': 1.140377402305603, 'acc': 0.53125, 'step': 637},\n",
       "  {'loss': 0.9217253923416138, 'acc': 0.65625, 'step': 638},\n",
       "  {'loss': 1.3288112878799438, 'acc': 0.53125, 'step': 639},\n",
       "  {'loss': 0.9709702730178833, 'acc': 0.65625, 'step': 640},\n",
       "  {'loss': 0.8833151459693909, 'acc': 0.71875, 'step': 641},\n",
       "  {'loss': 0.9397886395454407, 'acc': 0.5625, 'step': 642},\n",
       "  {'loss': 0.9778022170066833, 'acc': 0.6875, 'step': 643},\n",
       "  {'loss': 0.8201318979263306, 'acc': 0.75, 'step': 644},\n",
       "  {'loss': 0.9317141175270081, 'acc': 0.78125, 'step': 645},\n",
       "  {'loss': 1.1016830205917358, 'acc': 0.5625, 'step': 646},\n",
       "  {'loss': 0.9920358657836914, 'acc': 0.53125, 'step': 647},\n",
       "  {'loss': 1.1755259037017822, 'acc': 0.59375, 'step': 648},\n",
       "  {'loss': 0.9937771558761597, 'acc': 0.625, 'step': 649},\n",
       "  {'loss': 0.9304121732711792, 'acc': 0.625, 'step': 650},\n",
       "  {'loss': 0.9318289160728455, 'acc': 0.625, 'step': 651},\n",
       "  {'loss': 0.8521744012832642, 'acc': 0.78125, 'step': 652},\n",
       "  {'loss': 0.8380683660507202, 'acc': 0.75, 'step': 653},\n",
       "  {'loss': 1.1260703802108765, 'acc': 0.46875, 'step': 654},\n",
       "  {'loss': 0.9339345097541809, 'acc': 0.625, 'step': 655},\n",
       "  {'loss': 0.925844669342041, 'acc': 0.78125, 'step': 656},\n",
       "  {'loss': 0.6694250702857971, 'acc': 0.6875, 'step': 657},\n",
       "  {'loss': 1.0411312580108643, 'acc': 0.625, 'step': 658},\n",
       "  {'loss': 0.9934532046318054, 'acc': 0.71875, 'step': 659},\n",
       "  {'loss': 1.0446923971176147, 'acc': 0.5625, 'step': 660},\n",
       "  {'loss': 1.159433364868164, 'acc': 0.5625, 'step': 661},\n",
       "  {'loss': 0.9302550554275513, 'acc': 0.71875, 'step': 662},\n",
       "  {'loss': 0.9874433875083923, 'acc': 0.53125, 'step': 663},\n",
       "  {'loss': 0.950031042098999, 'acc': 0.5625, 'step': 664},\n",
       "  {'loss': 1.1605079174041748, 'acc': 0.59375, 'step': 665},\n",
       "  {'loss': 1.0295809507369995, 'acc': 0.5, 'step': 666},\n",
       "  {'loss': 1.032799482345581, 'acc': 0.59375, 'step': 667},\n",
       "  {'loss': 0.9357134699821472, 'acc': 0.71875, 'step': 668},\n",
       "  {'loss': 0.97200608253479, 'acc': 0.53125, 'step': 669},\n",
       "  {'loss': 1.112321138381958, 'acc': 0.46875, 'step': 670},\n",
       "  {'loss': 0.8660855293273926, 'acc': 0.625, 'step': 671},\n",
       "  {'loss': 0.8094015717506409, 'acc': 0.71875, 'step': 672},\n",
       "  {'loss': 0.7987916469573975, 'acc': 0.6875, 'step': 673},\n",
       "  {'loss': 0.8774246573448181, 'acc': 0.71875, 'step': 674},\n",
       "  {'loss': 0.84880530834198, 'acc': 0.75, 'step': 675},\n",
       "  {'loss': 0.9720531105995178, 'acc': 0.59375, 'step': 676},\n",
       "  {'loss': 0.960813581943512, 'acc': 0.71875, 'step': 677},\n",
       "  {'loss': 1.0552479028701782, 'acc': 0.5625, 'step': 678},\n",
       "  {'loss': 0.9228115081787109, 'acc': 0.78125, 'step': 679},\n",
       "  {'loss': 0.9099583029747009, 'acc': 0.625, 'step': 680},\n",
       "  {'loss': 1.3342370986938477, 'acc': 0.46875, 'step': 681},\n",
       "  {'loss': 0.8508966565132141, 'acc': 0.71875, 'step': 682},\n",
       "  {'loss': 1.0665311813354492, 'acc': 0.5625, 'step': 683},\n",
       "  {'loss': 0.9678391814231873, 'acc': 0.625, 'step': 684},\n",
       "  {'loss': 0.7868769764900208, 'acc': 0.71875, 'step': 685},\n",
       "  {'loss': 0.8715816140174866, 'acc': 0.8125, 'step': 686},\n",
       "  {'loss': 1.0461093187332153, 'acc': 0.5, 'step': 687},\n",
       "  {'loss': 0.9158753752708435, 'acc': 0.6875, 'step': 688},\n",
       "  {'loss': 1.355547547340393, 'acc': 0.59375, 'step': 689},\n",
       "  {'loss': 0.8422612547874451, 'acc': 0.6875, 'step': 690},\n",
       "  {'loss': 0.98506760597229, 'acc': 0.6875, 'step': 691},\n",
       "  {'loss': 0.88029944896698, 'acc': 0.53125, 'step': 692},\n",
       "  {'loss': 0.9177411198616028, 'acc': 0.59375, 'step': 693},\n",
       "  {'loss': 0.8299688696861267, 'acc': 0.65625, 'step': 694},\n",
       "  {'loss': 1.0146898031234741, 'acc': 0.5625, 'step': 695},\n",
       "  {'loss': 1.0992248058319092, 'acc': 0.59375, 'step': 696},\n",
       "  {'loss': 0.8235138654708862, 'acc': 0.75, 'step': 697},\n",
       "  {'loss': 0.9025234580039978, 'acc': 0.625, 'step': 698},\n",
       "  {'loss': 0.9943990707397461, 'acc': 0.59375, 'step': 699},\n",
       "  {'loss': 0.8995400667190552, 'acc': 0.625, 'step': 700},\n",
       "  {'loss': 1.0930190086364746, 'acc': 0.5, 'step': 701},\n",
       "  {'loss': 0.8465715050697327, 'acc': 0.84375, 'step': 702},\n",
       "  {'loss': 0.8373135924339294, 'acc': 0.71875, 'step': 703},\n",
       "  {'loss': 1.0552196502685547, 'acc': 0.65625, 'step': 704},\n",
       "  {'loss': 0.9761573076248169, 'acc': 0.625, 'step': 705},\n",
       "  {'loss': 1.074726939201355, 'acc': 0.59375, 'step': 706},\n",
       "  {'loss': 0.9291613101959229, 'acc': 0.65625, 'step': 707},\n",
       "  {'loss': 0.929374635219574, 'acc': 0.625, 'step': 708},\n",
       "  {'loss': 0.9700353741645813, 'acc': 0.5625, 'step': 709},\n",
       "  {'loss': 0.9277130365371704, 'acc': 0.65625, 'step': 710},\n",
       "  {'loss': 1.0358247756958008, 'acc': 0.625, 'step': 711},\n",
       "  {'loss': 0.8229588270187378, 'acc': 0.78125, 'step': 712},\n",
       "  {'loss': 1.089213490486145, 'acc': 0.5625, 'step': 713},\n",
       "  {'loss': 0.6768824458122253, 'acc': 0.78125, 'step': 714},\n",
       "  {'loss': 1.023780345916748, 'acc': 0.53125, 'step': 715},\n",
       "  {'loss': 0.9144590497016907, 'acc': 0.65625, 'step': 716},\n",
       "  {'loss': 1.0323628187179565, 'acc': 0.6875, 'step': 717},\n",
       "  {'loss': 0.8958563208580017, 'acc': 0.5625, 'step': 718},\n",
       "  {'loss': 0.8195865154266357, 'acc': 0.71875, 'step': 719},\n",
       "  {'loss': 0.8544365763664246, 'acc': 0.59375, 'step': 720},\n",
       "  {'loss': 0.8721163868904114, 'acc': 0.6875, 'step': 721},\n",
       "  {'loss': 0.9692857265472412, 'acc': 0.53125, 'step': 722},\n",
       "  {'loss': 0.9628630876541138, 'acc': 0.75, 'step': 723},\n",
       "  {'loss': 0.7549336552619934, 'acc': 0.6875, 'step': 724},\n",
       "  {'loss': 0.7783769965171814, 'acc': 0.78125, 'step': 725},\n",
       "  {'loss': 0.9030863046646118, 'acc': 0.625, 'step': 726},\n",
       "  {'loss': 0.8903716802597046, 'acc': 0.6875, 'step': 727},\n",
       "  {'loss': 0.9639134407043457, 'acc': 0.59375, 'step': 728},\n",
       "  {'loss': 0.8739962577819824, 'acc': 0.71875, 'step': 729},\n",
       "  {'loss': 0.9606307148933411, 'acc': 0.59375, 'step': 730},\n",
       "  {'loss': 0.9650124311447144, 'acc': 0.59375, 'step': 731},\n",
       "  {'loss': 0.9007686376571655, 'acc': 0.65625, 'step': 732},\n",
       "  {'loss': 0.998499870300293, 'acc': 0.53125, 'step': 733},\n",
       "  {'loss': 1.1412044763565063, 'acc': 0.625, 'step': 734},\n",
       "  {'loss': 0.8418060541152954, 'acc': 0.71875, 'step': 735},\n",
       "  {'loss': 0.8682103157043457, 'acc': 0.71875, 'step': 736},\n",
       "  {'loss': 0.8069539070129395, 'acc': 0.625, 'step': 737},\n",
       "  {'loss': 0.5439857244491577, 'acc': 0.90625, 'step': 738},\n",
       "  {'loss': 0.944517195224762, 'acc': 0.71875, 'step': 739},\n",
       "  {'loss': 1.0136927366256714, 'acc': 0.625, 'step': 740},\n",
       "  {'loss': 0.9759538769721985, 'acc': 0.5625, 'step': 741},\n",
       "  {'loss': 0.9340801239013672, 'acc': 0.75, 'step': 742},\n",
       "  {'loss': 0.9437878131866455, 'acc': 0.625, 'step': 743},\n",
       "  {'loss': 0.996017336845398, 'acc': 0.59375, 'step': 744},\n",
       "  {'loss': 0.8183241486549377, 'acc': 0.71875, 'step': 745},\n",
       "  {'loss': 1.0749385356903076, 'acc': 0.5625, 'step': 746},\n",
       "  {'loss': 1.0139143466949463, 'acc': 0.65625, 'step': 747},\n",
       "  {'loss': 1.0102766752243042, 'acc': 0.53125, 'step': 748},\n",
       "  {'loss': 1.0051883459091187, 'acc': 0.625, 'step': 749},\n",
       "  {'loss': 1.1941152811050415, 'acc': 0.53125, 'step': 750},\n",
       "  {'loss': 1.2717305421829224, 'acc': 0.59375, 'step': 751},\n",
       "  {'loss': 0.7507970929145813, 'acc': 0.8125, 'step': 752},\n",
       "  {'loss': 0.8814446926116943, 'acc': 0.75, 'step': 753},\n",
       "  {'loss': 1.2065918445587158, 'acc': 0.625, 'step': 754},\n",
       "  {'loss': 1.1755419969558716, 'acc': 0.53125, 'step': 755},\n",
       "  {'loss': 0.7681368589401245, 'acc': 0.6875, 'step': 756},\n",
       "  {'loss': 0.8766769170761108, 'acc': 0.71875, 'step': 757},\n",
       "  {'loss': 0.8929233551025391, 'acc': 0.71875, 'step': 758},\n",
       "  {'loss': 0.8501740097999573, 'acc': 0.75, 'step': 759},\n",
       "  {'loss': 0.9831251502037048, 'acc': 0.6875, 'step': 760},\n",
       "  {'loss': 0.7168570756912231, 'acc': 0.75, 'step': 761},\n",
       "  {'loss': 0.8613385558128357, 'acc': 0.625, 'step': 762},\n",
       "  {'loss': 0.9710860848426819, 'acc': 0.65625, 'step': 763},\n",
       "  {'loss': 0.7600350975990295, 'acc': 0.78125, 'step': 764},\n",
       "  {'loss': 0.8644798398017883, 'acc': 0.625, 'step': 765},\n",
       "  {'loss': 0.8391206860542297, 'acc': 0.71875, 'step': 766},\n",
       "  {'loss': 0.8713679313659668, 'acc': 0.75, 'step': 767},\n",
       "  {'loss': 0.8766720294952393, 'acc': 0.625, 'step': 768},\n",
       "  {'loss': 0.9942333102226257, 'acc': 0.5, 'step': 769},\n",
       "  {'loss': 0.6334342956542969, 'acc': 0.875, 'step': 770},\n",
       "  {'loss': 0.8632346391677856, 'acc': 0.65625, 'step': 771},\n",
       "  {'loss': 0.7752611041069031, 'acc': 0.6875, 'step': 772},\n",
       "  {'loss': 0.9256047606468201, 'acc': 0.625, 'step': 773},\n",
       "  {'loss': 0.8609453439712524, 'acc': 0.65625, 'step': 774},\n",
       "  {'loss': 1.1115350723266602, 'acc': 0.71875, 'step': 775},\n",
       "  {'loss': 0.8411933183670044, 'acc': 0.65625, 'step': 776},\n",
       "  {'loss': 0.9330089688301086, 'acc': 0.65625, 'step': 777},\n",
       "  {'loss': 0.9184760451316833, 'acc': 0.65625, 'step': 778},\n",
       "  {'loss': 0.796585202217102, 'acc': 0.78125, 'step': 779},\n",
       "  {'loss': 0.8194411396980286, 'acc': 0.84375, 'step': 780},\n",
       "  {'loss': 0.7964844107627869, 'acc': 0.71875, 'step': 781},\n",
       "  {'loss': 1.0378881692886353, 'acc': 0.625, 'step': 782},\n",
       "  {'loss': 0.9329825639724731, 'acc': 0.625, 'step': 783},\n",
       "  {'loss': 0.7694375514984131, 'acc': 0.65625, 'step': 784},\n",
       "  {'loss': 0.9375501871109009, 'acc': 0.59375, 'step': 785},\n",
       "  {'loss': 0.9567354917526245, 'acc': 0.6875, 'step': 786},\n",
       "  {'loss': 1.0475637912750244, 'acc': 0.4375, 'step': 787},\n",
       "  {'loss': 1.145789384841919, 'acc': 0.625, 'step': 788},\n",
       "  {'loss': 0.8440248966217041, 'acc': 0.6875, 'step': 789},\n",
       "  {'loss': 0.7946481704711914, 'acc': 0.625, 'step': 790},\n",
       "  {'loss': 1.0039633512496948, 'acc': 0.6875, 'step': 791},\n",
       "  {'loss': 0.916442334651947, 'acc': 0.65625, 'step': 792},\n",
       "  {'loss': 0.7747121453285217, 'acc': 0.6875, 'step': 793},\n",
       "  {'loss': 0.9355875253677368, 'acc': 0.5625, 'step': 794},\n",
       "  {'loss': 0.8490644693374634, 'acc': 0.65625, 'step': 795},\n",
       "  {'loss': 0.8882049322128296, 'acc': 0.6875, 'step': 796},\n",
       "  {'loss': 0.9707413911819458, 'acc': 0.59375, 'step': 797},\n",
       "  {'loss': 0.6824644207954407, 'acc': 0.75, 'step': 798},\n",
       "  {'loss': 0.7715519666671753, 'acc': 0.5625, 'step': 799},\n",
       "  {'loss': 0.8335321545600891, 'acc': 0.65625, 'step': 800},\n",
       "  {'loss': 0.7578590512275696, 'acc': 0.71875, 'step': 801},\n",
       "  {'loss': 0.7609171867370605, 'acc': 0.65625, 'step': 802},\n",
       "  {'loss': 1.0124379396438599, 'acc': 0.71875, 'step': 803},\n",
       "  {'loss': 0.7957483530044556, 'acc': 0.65625, 'step': 804},\n",
       "  {'loss': 0.7672212719917297, 'acc': 0.6875, 'step': 805},\n",
       "  {'loss': 0.8675673604011536, 'acc': 0.65625, 'step': 806},\n",
       "  {'loss': 0.8766409158706665, 'acc': 0.625, 'step': 807},\n",
       "  {'loss': 0.8588076829910278, 'acc': 0.65625, 'step': 808},\n",
       "  {'loss': 0.8872078061103821, 'acc': 0.71875, 'step': 809},\n",
       "  {'loss': 0.7240896224975586, 'acc': 0.71875, 'step': 810},\n",
       "  {'loss': 0.7667373418807983, 'acc': 0.6875, 'step': 811},\n",
       "  {'loss': 0.8654447197914124, 'acc': 0.625, 'step': 812},\n",
       "  {'loss': 1.0297274589538574, 'acc': 0.5, 'step': 813},\n",
       "  {'loss': 0.8903162479400635, 'acc': 0.625, 'step': 814},\n",
       "  {'loss': 0.9222787022590637, 'acc': 0.625, 'step': 815},\n",
       "  {'loss': 0.6163166761398315, 'acc': 0.84375, 'step': 816},\n",
       "  {'loss': 0.9244416952133179, 'acc': 0.65625, 'step': 817},\n",
       "  {'loss': 0.8070964813232422, 'acc': 0.65625, 'step': 818},\n",
       "  {'loss': 0.6701831817626953, 'acc': 0.90625, 'step': 819},\n",
       "  {'loss': 0.8077805638313293, 'acc': 0.75, 'step': 820},\n",
       "  {'loss': 1.040097951889038, 'acc': 0.59375, 'step': 821},\n",
       "  {'loss': 0.8271989822387695, 'acc': 0.71875, 'step': 822},\n",
       "  {'loss': 0.7421131134033203, 'acc': 0.6875, 'step': 823},\n",
       "  {'loss': 0.9291276335716248, 'acc': 0.625, 'step': 824},\n",
       "  {'loss': 1.1003915071487427, 'acc': 0.65625, 'step': 825},\n",
       "  {'loss': 0.8559849262237549, 'acc': 0.6875, 'step': 826},\n",
       "  {'loss': 0.8202111721038818, 'acc': 0.75, 'step': 827},\n",
       "  {'loss': 0.9586536288261414, 'acc': 0.59375, 'step': 828},\n",
       "  {'loss': 0.7920426726341248, 'acc': 0.65625, 'step': 829},\n",
       "  {'loss': 1.0850203037261963, 'acc': 0.5, 'step': 830},\n",
       "  {'loss': 0.7728974223136902, 'acc': 0.75, 'step': 831},\n",
       "  {'loss': 0.795096755027771, 'acc': 0.78125, 'step': 832},\n",
       "  {'loss': 0.8943591713905334, 'acc': 0.6875, 'step': 833},\n",
       "  {'loss': 0.9166378378868103, 'acc': 0.65625, 'step': 834},\n",
       "  {'loss': 0.9726698994636536, 'acc': 0.625, 'step': 835},\n",
       "  {'loss': 0.986402153968811, 'acc': 0.6875, 'step': 836},\n",
       "  {'loss': 0.8518053889274597, 'acc': 0.6875, 'step': 837},\n",
       "  {'loss': 1.0265026092529297, 'acc': 0.65625, 'step': 838},\n",
       "  {'loss': 0.9138658046722412, 'acc': 0.65625, 'step': 839},\n",
       "  {'loss': 0.9133670926094055, 'acc': 0.65625, 'step': 840},\n",
       "  {'loss': 0.9018692374229431, 'acc': 0.65625, 'step': 841},\n",
       "  {'loss': 0.6866708993911743, 'acc': 0.84375, 'step': 842},\n",
       "  {'loss': 0.8989086747169495, 'acc': 0.78125, 'step': 843},\n",
       "  {'loss': 0.8637005090713501, 'acc': 0.625, 'step': 844},\n",
       "  {'loss': 0.7307823300361633, 'acc': 0.78125, 'step': 845},\n",
       "  {'loss': 1.1857720613479614, 'acc': 0.65625, 'step': 846},\n",
       "  {'loss': 1.2186317443847656, 'acc': 0.5, 'step': 847},\n",
       "  {'loss': 1.105301022529602, 'acc': 0.625, 'step': 848},\n",
       "  {'loss': 0.7312266826629639, 'acc': 0.71875, 'step': 849},\n",
       "  {'loss': 0.9616396427154541, 'acc': 0.625, 'step': 850},\n",
       "  {'loss': 0.9256935119628906, 'acc': 0.625, 'step': 851},\n",
       "  {'loss': 0.8022973537445068, 'acc': 0.6875, 'step': 852},\n",
       "  {'loss': 0.7480772733688354, 'acc': 0.75, 'step': 853},\n",
       "  {'loss': 0.7576966285705566, 'acc': 0.78125, 'step': 854},\n",
       "  {'loss': 0.7014174461364746, 'acc': 0.71875, 'step': 855},\n",
       "  {'loss': 0.8951285481452942, 'acc': 0.65625, 'step': 856},\n",
       "  {'loss': 0.9356914162635803, 'acc': 0.625, 'step': 857},\n",
       "  {'loss': 0.7436223030090332, 'acc': 0.78125, 'step': 858},\n",
       "  {'loss': 0.8152132630348206, 'acc': 0.625, 'step': 859},\n",
       "  {'loss': 0.8006428480148315, 'acc': 0.59375, 'step': 860},\n",
       "  {'loss': 0.7461904883384705, 'acc': 0.71875, 'step': 861},\n",
       "  {'loss': 1.0210117101669312, 'acc': 0.46875, 'step': 862},\n",
       "  {'loss': 0.8390570878982544, 'acc': 0.59375, 'step': 863},\n",
       "  {'loss': 0.9931724071502686, 'acc': 0.6875, 'step': 864},\n",
       "  {'loss': 1.0589364767074585, 'acc': 0.53125, 'step': 865},\n",
       "  {'loss': 0.7892004251480103, 'acc': 0.625, 'step': 866},\n",
       "  {'loss': 0.7485520243644714, 'acc': 0.78125, 'step': 867},\n",
       "  {'loss': 0.795374870300293, 'acc': 0.75, 'step': 868},\n",
       "  {'loss': 0.6958668828010559, 'acc': 0.71875, 'step': 869},\n",
       "  {'loss': 0.7075170874595642, 'acc': 0.78125, 'step': 870},\n",
       "  {'loss': 0.9199908375740051, 'acc': 0.5625, 'step': 871},\n",
       "  {'loss': 1.0176540613174438, 'acc': 0.53125, 'step': 872},\n",
       "  {'loss': 0.7934225797653198, 'acc': 0.71875, 'step': 873},\n",
       "  {'loss': 1.1044069528579712, 'acc': 0.6875, 'step': 874},\n",
       "  {'loss': 0.6041551232337952, 'acc': 0.78125, 'step': 875},\n",
       "  {'loss': 0.912736177444458, 'acc': 0.5625, 'step': 876},\n",
       "  {'loss': 0.9128010272979736, 'acc': 0.65625, 'step': 877},\n",
       "  {'loss': 1.0324912071228027, 'acc': 0.59375, 'step': 878},\n",
       "  {'loss': 0.9590002298355103, 'acc': 0.625, 'step': 879},\n",
       "  {'loss': 0.8332440257072449, 'acc': 0.65625, 'step': 880},\n",
       "  {'loss': 0.7642689943313599, 'acc': 0.75, 'step': 881},\n",
       "  {'loss': 0.8982853293418884, 'acc': 0.6875, 'step': 882},\n",
       "  {'loss': 0.7735534906387329, 'acc': 0.6875, 'step': 883},\n",
       "  {'loss': 0.7214020490646362, 'acc': 0.78125, 'step': 884},\n",
       "  {'loss': 0.8452680110931396, 'acc': 0.65625, 'step': 885},\n",
       "  {'loss': 0.7384381294250488, 'acc': 0.6875, 'step': 886},\n",
       "  {'loss': 0.7079005241394043, 'acc': 0.78125, 'step': 887},\n",
       "  {'loss': 0.8109270334243774, 'acc': 0.6875, 'step': 888},\n",
       "  {'loss': 0.7154896855354309, 'acc': 0.6875, 'step': 889},\n",
       "  {'loss': 0.8869657516479492, 'acc': 0.71875, 'step': 890},\n",
       "  {'loss': 0.9477030634880066, 'acc': 0.625, 'step': 891},\n",
       "  {'loss': 1.082229733467102, 'acc': 0.5, 'step': 892},\n",
       "  {'loss': 0.7945743203163147, 'acc': 0.78125, 'step': 893},\n",
       "  {'loss': 0.7408510446548462, 'acc': 0.71875, 'step': 894},\n",
       "  {'loss': 0.7740665078163147, 'acc': 0.71875, 'step': 895},\n",
       "  {'loss': 0.6746494770050049, 'acc': 0.75, 'step': 896},\n",
       "  {'loss': 1.030320405960083, 'acc': 0.46875, 'step': 897},\n",
       "  {'loss': 1.0686160326004028, 'acc': 0.625, 'step': 898},\n",
       "  {'loss': 0.5255104899406433, 'acc': 0.875, 'step': 899},\n",
       "  {'loss': 0.7864964008331299, 'acc': 0.65625, 'step': 900},\n",
       "  {'loss': 0.7757530212402344, 'acc': 0.6875, 'step': 901},\n",
       "  {'loss': 0.9328392148017883, 'acc': 0.625, 'step': 902},\n",
       "  {'loss': 0.6401075720787048, 'acc': 0.875, 'step': 903},\n",
       "  {'loss': 0.7758831977844238, 'acc': 0.71875, 'step': 904},\n",
       "  {'loss': 0.9065361618995667, 'acc': 0.59375, 'step': 905},\n",
       "  {'loss': 0.964240312576294, 'acc': 0.65625, 'step': 906},\n",
       "  {'loss': 0.6891902685165405, 'acc': 0.71875, 'step': 907},\n",
       "  {'loss': 0.8444768190383911, 'acc': 0.6875, 'step': 908},\n",
       "  {'loss': 1.0558546781539917, 'acc': 0.53125, 'step': 909},\n",
       "  {'loss': 0.9269042611122131, 'acc': 0.53125, 'step': 910},\n",
       "  {'loss': 0.6526243686676025, 'acc': 0.78125, 'step': 911},\n",
       "  {'loss': 0.7226747870445251, 'acc': 0.75, 'step': 912},\n",
       "  {'loss': 0.6856522560119629, 'acc': 0.71875, 'step': 913},\n",
       "  {'loss': 0.785896897315979, 'acc': 0.6875, 'step': 914},\n",
       "  {'loss': 1.4044640064239502, 'acc': 0.625, 'step': 915},\n",
       "  {'loss': 0.9251543879508972, 'acc': 0.65625, 'step': 916},\n",
       "  {'loss': 0.7152748703956604, 'acc': 0.8125, 'step': 917},\n",
       "  {'loss': 0.8985882997512817, 'acc': 0.65625, 'step': 918},\n",
       "  {'loss': 0.858600378036499, 'acc': 0.625, 'step': 919},\n",
       "  {'loss': 0.739044725894928, 'acc': 0.65625, 'step': 920},\n",
       "  {'loss': 0.9156314730644226, 'acc': 0.65625, 'step': 921},\n",
       "  {'loss': 0.8548970222473145, 'acc': 0.75, 'step': 922},\n",
       "  {'loss': 0.6298716068267822, 'acc': 0.8125, 'step': 923},\n",
       "  {'loss': 0.7520244121551514, 'acc': 0.625, 'step': 924},\n",
       "  {'loss': 0.8204572796821594, 'acc': 0.71875, 'step': 925},\n",
       "  {'loss': 0.7562674880027771, 'acc': 0.65625, 'step': 926},\n",
       "  {'loss': 0.9152181148529053, 'acc': 0.59375, 'step': 927},\n",
       "  {'loss': 0.8557361364364624, 'acc': 0.625, 'step': 928},\n",
       "  {'loss': 0.8664455413818359, 'acc': 0.625, 'step': 929},\n",
       "  {'loss': 0.9298019409179688, 'acc': 0.65625, 'step': 930},\n",
       "  {'loss': 0.9650934934616089, 'acc': 0.59375, 'step': 931},\n",
       "  {'loss': 0.790247917175293, 'acc': 0.65625, 'step': 932},\n",
       "  {'loss': 0.9226794838905334, 'acc': 0.625, 'step': 933},\n",
       "  {'loss': 0.6957685947418213, 'acc': 0.75, 'step': 934},\n",
       "  {'loss': 0.784111738204956, 'acc': 0.6875, 'step': 935},\n",
       "  {'loss': 0.9295765161514282, 'acc': 0.65625, 'step': 936},\n",
       "  {'loss': 0.9792888760566711, 'acc': 0.5, 'step': 937},\n",
       "  {'loss': 0.7673304080963135, 'acc': 0.71875, 'step': 938},\n",
       "  {'loss': 0.904014527797699, 'acc': 0.75, 'step': 939},\n",
       "  {'loss': 0.6450692415237427, 'acc': 0.71875, 'step': 940},\n",
       "  {'loss': 0.6456676721572876, 'acc': 0.78125, 'step': 941},\n",
       "  {'loss': 0.6292083263397217, 'acc': 0.8125, 'step': 942},\n",
       "  {'loss': 0.7033044099807739, 'acc': 0.71875, 'step': 943},\n",
       "  {'loss': 0.5679450035095215, 'acc': 0.84375, 'step': 944},\n",
       "  {'loss': 0.825264573097229, 'acc': 0.625, 'step': 945},\n",
       "  {'loss': 0.9107604622840881, 'acc': 0.53125, 'step': 946},\n",
       "  {'loss': 0.75227952003479, 'acc': 0.71875, 'step': 947},\n",
       "  {'loss': 0.9228508472442627, 'acc': 0.65625, 'step': 948},\n",
       "  {'loss': 0.9368991851806641, 'acc': 0.59375, 'step': 949},\n",
       "  {'loss': 0.9149298667907715, 'acc': 0.625, 'step': 950},\n",
       "  {'loss': 0.8342806696891785, 'acc': 0.6875, 'step': 951},\n",
       "  {'loss': 0.8648393750190735, 'acc': 0.8125, 'step': 952},\n",
       "  {'loss': 0.8216604590415955, 'acc': 0.65625, 'step': 953},\n",
       "  {'loss': 0.692742645740509, 'acc': 0.65625, 'step': 954},\n",
       "  {'loss': 0.9340295791625977, 'acc': 0.6875, 'step': 955},\n",
       "  {'loss': 0.8096905946731567, 'acc': 0.6875, 'step': 956},\n",
       "  {'loss': 1.0295367240905762, 'acc': 0.5, 'step': 957},\n",
       "  {'loss': 0.6343998312950134, 'acc': 0.75, 'step': 958},\n",
       "  {'loss': 0.8979251384735107, 'acc': 0.65625, 'step': 959},\n",
       "  {'loss': 0.7767812609672546, 'acc': 0.59375, 'step': 960},\n",
       "  {'loss': 1.1582456827163696, 'acc': 0.59375, 'step': 961},\n",
       "  {'loss': 0.8128206133842468, 'acc': 0.6875, 'step': 962},\n",
       "  {'loss': 0.687998354434967, 'acc': 0.6875, 'step': 963},\n",
       "  {'loss': 0.9316663146018982, 'acc': 0.625, 'step': 964},\n",
       "  {'loss': 0.9527996182441711, 'acc': 0.5625, 'step': 965},\n",
       "  {'loss': 1.058819055557251, 'acc': 0.5, 'step': 966},\n",
       "  {'loss': 0.9614555239677429, 'acc': 0.53125, 'step': 967},\n",
       "  {'loss': 0.6980287432670593, 'acc': 0.71875, 'step': 968},\n",
       "  {'loss': 0.8626757860183716, 'acc': 0.6875, 'step': 969},\n",
       "  {'loss': 1.0262715816497803, 'acc': 0.6875, 'step': 970},\n",
       "  {'loss': 0.9744911789894104, 'acc': 0.625, 'step': 971},\n",
       "  {'loss': 0.7920833826065063, 'acc': 0.71875, 'step': 972},\n",
       "  {'loss': 0.5871366858482361, 'acc': 0.84375, 'step': 973},\n",
       "  {'loss': 0.768168568611145, 'acc': 0.75, 'step': 974},\n",
       "  {'loss': 0.7027091979980469, 'acc': 0.71875, 'step': 975},\n",
       "  {'loss': 0.8227317333221436, 'acc': 0.625, 'step': 976},\n",
       "  {'loss': 1.1179074048995972, 'acc': 0.5, 'step': 977},\n",
       "  {'loss': 0.8536558151245117, 'acc': 0.59375, 'step': 978},\n",
       "  {'loss': 0.9379599094390869, 'acc': 0.6875, 'step': 979},\n",
       "  {'loss': 0.823077380657196, 'acc': 0.6875, 'step': 980},\n",
       "  {'loss': 0.7626999020576477, 'acc': 0.71875, 'step': 981},\n",
       "  {'loss': 0.714195191860199, 'acc': 0.8125, 'step': 982},\n",
       "  {'loss': 0.7587233781814575, 'acc': 0.75, 'step': 983},\n",
       "  {'loss': 1.0196744203567505, 'acc': 0.71875, 'step': 984},\n",
       "  {'loss': 0.7987529635429382, 'acc': 0.75, 'step': 985},\n",
       "  {'loss': 0.7474018931388855, 'acc': 0.6875, 'step': 986},\n",
       "  {'loss': 0.6415885090827942, 'acc': 0.8125, 'step': 987},\n",
       "  {'loss': 0.6548152565956116, 'acc': 0.78125, 'step': 988},\n",
       "  {'loss': 0.9109693765640259, 'acc': 0.625, 'step': 989},\n",
       "  {'loss': 0.8228800296783447, 'acc': 0.75, 'step': 990},\n",
       "  {'loss': 0.7373120784759521, 'acc': 0.6875, 'step': 991},\n",
       "  {'loss': 0.8624994158744812, 'acc': 0.65625, 'step': 992},\n",
       "  {'loss': 0.7100834250450134, 'acc': 0.6875, 'step': 993},\n",
       "  {'loss': 0.9225354790687561, 'acc': 0.53125, 'step': 994},\n",
       "  {'loss': 0.926030695438385, 'acc': 0.71875, 'step': 995},\n",
       "  {'loss': 0.9878151416778564, 'acc': 0.59375, 'step': 996},\n",
       "  {'loss': 0.8982810974121094, 'acc': 0.5625, 'step': 997},\n",
       "  {'loss': 0.8630594611167908, 'acc': 0.71875, 'step': 998},\n",
       "  {'loss': 0.6741873025894165, 'acc': 0.78125, 'step': 999},\n",
       "  ...],\n",
       " 'val': [{'loss': np.float64(2.2965251043581736), 'acc': 0.1405, 'step': 0},\n",
       "  {'loss': np.float64(0.833980801482551), 'acc': 0.6774, 'step': 1000},\n",
       "  {'loss': np.float64(0.6577633837351022), 'acc': 0.7683, 'step': 2000},\n",
       "  {'loss': np.float64(0.5809204897370202), 'acc': 0.7894, 'step': 3000},\n",
       "  {'loss': np.float64(0.5383248433899194), 'acc': 0.808, 'step': 4000},\n",
       "  {'loss': np.float64(0.5141027878743772), 'acc': 0.816, 'step': 5000},\n",
       "  {'loss': np.float64(0.49423302681491776), 'acc': 0.8208, 'step': 6000},\n",
       "  {'loss': np.float64(0.49383456581316815), 'acc': 0.8209, 'step': 7000},\n",
       "  {'loss': np.float64(0.4809814958145824), 'acc': 0.8307, 'step': 8000},\n",
       "  {'loss': np.float64(0.4681518847188249), 'acc': 0.8345, 'step': 9000},\n",
       "  {'loss': np.float64(0.4548352023663993), 'acc': 0.838, 'step': 10000},\n",
       "  {'loss': np.float64(0.44499226471486564), 'acc': 0.8426, 'step': 11000},\n",
       "  {'loss': np.float64(0.43870587268481237), 'acc': 0.8448, 'step': 12000},\n",
       "  {'loss': np.float64(0.43580882555950945), 'acc': 0.8456, 'step': 13000},\n",
       "  {'loss': np.float64(0.4247242918315406), 'acc': 0.8487, 'step': 14000},\n",
       "  {'loss': np.float64(0.4208148637661538), 'acc': 0.8511, 'step': 15000},\n",
       "  {'loss': np.float64(0.42560139841165023), 'acc': 0.8486, 'step': 16000},\n",
       "  {'loss': np.float64(0.4168824876744907), 'acc': 0.8548, 'step': 17000},\n",
       "  {'loss': np.float64(0.3996784899609919), 'acc': 0.8581, 'step': 18000},\n",
       "  {'loss': np.float64(0.39813994897154575), 'acc': 0.8587, 'step': 19000},\n",
       "  {'loss': np.float64(0.3947878439015093), 'acc': 0.8609, 'step': 20000},\n",
       "  {'loss': np.float64(0.3957884951283376), 'acc': 0.8586, 'step': 21000},\n",
       "  {'loss': np.float64(0.3961140621727267), 'acc': 0.8585, 'step': 22000},\n",
       "  {'loss': np.float64(0.3932094125511547), 'acc': 0.8586, 'step': 23000},\n",
       "  {'loss': np.float64(0.3910124980555937), 'acc': 0.8615, 'step': 24000},\n",
       "  {'loss': np.float64(0.40003488153314437), 'acc': 0.853, 'step': 25000},\n",
       "  {'loss': np.float64(0.38695309861018634), 'acc': 0.8628, 'step': 26000},\n",
       "  {'loss': np.float64(0.3730779919809046), 'acc': 0.8677, 'step': 27000},\n",
       "  {'loss': np.float64(0.381464914987072), 'acc': 0.8632, 'step': 28000},\n",
       "  {'loss': np.float64(0.3764605224608613), 'acc': 0.8604, 'step': 29000},\n",
       "  {'loss': np.float64(0.3620378763173906), 'acc': 0.8705, 'step': 30000},\n",
       "  {'loss': np.float64(0.36381075559808806), 'acc': 0.8687, 'step': 31000},\n",
       "  {'loss': np.float64(0.3734846258649049), 'acc': 0.8636, 'step': 32000},\n",
       "  {'loss': np.float64(0.35967214112750256), 'acc': 0.8703, 'step': 33000},\n",
       "  {'loss': np.float64(0.35340876433367546), 'acc': 0.8742, 'step': 34000},\n",
       "  {'loss': np.float64(0.3695380328276668), 'acc': 0.866, 'step': 35000},\n",
       "  {'loss': np.float64(0.3523095028159527), 'acc': 0.8763, 'step': 36000},\n",
       "  {'loss': np.float64(0.36596843574088983), 'acc': 0.8657, 'step': 37000}]}"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 23
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T12:27:33.824829Z",
     "start_time": "2025-02-25T12:27:33.629381Z"
    }
   },
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "    print(train_df.head())\n",
    "    print(val_df.head())\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns) #因为有loss和acc两个指标，所以画个子图\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5)) #fig_num个子图，figsize是子图大小\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        #index是步数，item是指标名字\n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        x_data=range(0, train_df.index[-1], 5000) #每隔5000步标出一个点\n",
    "        axs[idx].set_xticks(x_data)\n",
    "        axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", x_data)) #map生成labal\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=500)  #横坐标是 steps"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "          loss      acc\n",
      "step                   \n",
      "0     2.294312  0.12500\n",
      "500   1.019302  0.75000\n",
      "1000  0.686752  0.71875\n",
      "1500  0.662610  0.75000\n",
      "2000  0.568718  0.71875\n",
      "          loss     acc\n",
      "step                  \n",
      "0     2.296525  0.1405\n",
      "1000  0.833981  0.6774\n",
      "2000  0.657763  0.7683\n",
      "3000  0.580920  0.7894\n",
      "4000  0.538325  0.8080\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 24
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "model = NeuralNetwork() #上线时加载模型\n",
    "model = model.to(device)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-02-25T12:35:27.778229Z",
     "start_time": "2025-02-25T12:35:27.771042Z"
    }
   },
   "outputs": [],
   "execution_count": 25
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-25T12:41:44.872672Z",
     "start_time": "2025-02-25T12:41:43.638485Z"
    }
   },
   "source": [
    "# dataload for evaluating\n",
    "#模型保存有两种情况，一种是模型结构和模型参数都保存，一种是只保存模型参数，这里是只保存模型参数，所以需要加上weights_only=True\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/best.ckpt\", weights_only=True,map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, val_loader, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.3523\n",
      "accuracy: 0.8763\n"
     ]
    }
   ],
   "execution_count": 26
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": ""
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
